Действия Android, которые переопределяют функции, должны вызывать супер. *

При создании собственного подкласса 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 Plugin сгенерировано надежным кодом?

Ответ 1

должен

  • 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);

Собственно, при переопределении какого-либо метода хорошо изучить исходный код переопределенного класса и посмотреть, что именно делает этот метод.

Ответ 2

Его просто хорошая практика для вызова супер-реализации.

BUT несколько раз его обязательный, как в "onCreate()", иначе в этом случае будет "ActivityInstantiateexcepetion".

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

onBackPressed(){
if(myFlag){
// do my stuff
}
else {
// Do usual stuff on Back pressed
super.onBackPressed ();
}

Так что, если ваш "myFlag" будет правдой, ваши вещи будут выполнены иначе, как обычный onBackpressed будет выполнен.

Ответ 3

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

Ответ 4

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