Активность Android, которая переопределяет функции, должна вызывать super. * - PullRequest
11 голосов
/ 17 января 2012

При создании собственного подкласса Activity мы переопределяем некоторые основные функции жизненного цикла Activity.

В каком из них мы должны вызвать супер реализацию, где должны и где это только хороший способ ?

// base lifecycle
onCreate(Bundle savedInstanceState);
onStart();
onRestart();
onResume();
onPause();
onStop();
onDestroy();
finalize();
onUserLeaveHint();
// instance state
onSaveInstanceState(Bundle outState);
onRestoreInstanceState(Bundle savedInstanceState)
// others
onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo);
onCreateOptionsMenu(Menu menu);
onOptionsItemSelected(MenuItem item);
onContextItemSelected(MenuItem item);
onMenuItemSelected(int featureId, MenuItem item);
onActivityResult(int requestCode, int resultCode, Intent data);
onBackPressed();

Список методов не является окончательным, не стесняйтесь добавлять дополнительные функции, где мы должны знать, что делать.


Для тех, кто интересуется, куда следует super.methodName поместить
Расположение вызовов super () в сгенерированном плагином Android Eclipse надежном коде?

Ответы [ 4 ]

6 голосов
/ 17 января 2012

должен:

  • onCreate(Bundle savedInstanceState);
  • onStart();
  • onRestart();
  • onResume();
  • onPause();
  • onStop();
  • onDestroy();
  • onPostCreate(Bundle savedInstanceState);
  • onPostResume();

должен / не должен: (может быть полезно вызвать метод суперкласса, если только вы не управляете состоянием активности или намеренно сами не изменяете поведение деятельности - в таком случае это может быть вредно)

  • onSaveInstanceState(Bundle savedInstanceState);
  • onRestoreInstanceState(Bundle savedInstanceState);
  • onBackPressed();
  • onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo);
  • onCreateOptionsMenu(Menu menu);
  • onOptionsItemSelected(MenuItem item);
  • onContextItemSelected(MenuItem item);
  • onMenuItemSelected(int featureId, MenuItem item);

На самом деле, при переопределении любого метода рекомендуется посмотреть на исходный код переопределенного класса и посмотреть, что именно делает этот метод.

4 голосов
/ 17 января 2012

Хорошая практика - вызывать супер реализацию.

НО иногда она обязательна, как в "onCreate ()", иначе в этом случае будет "ActivityInstantiateingexcepetion".

Кроме того, иногда вы хотите переопределить супер реализацию в некоторых случаях, например

<i> onBackPressed(){<br> if(myFlag){<br>// do my stuff <br>}<br> else { <br> // Do usual stuff on Back pressed <br>super.onBackPressed (); <br>} </i>
Таким образом, если ваш «myFlag» будет истинным, все будет выполнено в обычном режиме наBackpressed будет выполнен.

2 голосов
/ 17 января 2012

Это все Activity метод класса. В Java и Android, если вы вызываете superclass метод, вы должны написать super.methodName

0 голосов
/ 17 января 2012

все эти методы должны вызывать super.method (), я думаю

...