Anonymous class will have access to the final outer variables, so it might be more convienient to use this. For instance:
final String x = "123";
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// You can acces "x" here.
}
});
In addition, it's the question of the coding style. Using anonymous can lead to the code which is more verbose but, at the same time, a little bit easier to follow.
Also, non-anonymous class can be instantiated in multiple places.