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

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


надо:

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

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

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

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


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

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

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

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

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


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


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