Действия 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() Я думаю,