2012-01-17 5 views
11

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

В какой из них мы необходимы вызова супер реализации, где мы РЕКОМЕНДУЕМОГО и где он только хороший тон?

// 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
Locations of super() calls in Android Eclipse Plugin generated code reliable?

+0

Android выкинет исключение RuntimeException, если вы забудете назвать супер-метод, хотя это было бы необходимо. – Flo

+0

Суперкласс в FIRST: 'onRestoreInstanceState, onStop, onRestart, onStart'. Суперкласс в LAST: 'onDestroy, onPause, onSaveInstanceState, onResume'. –

ответ

6

сусло:

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

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

+1

отлично, по крайней мере, вы ответили на мой вопрос :) Спасибо –

+2

ур приветствую, Марек) –

+0

не могли бы вы объяснить, как вы классифицировали эти методы в «обязательные» и «обязательные»? Я новичок, и я пытаюсь понять, как определить, какие методы должны иметь вызов super(). Я не хочу просто помнить и вспоминать, когда это необходимо ... Я хочу понять, как это понять. – vicky96

2

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

4

Его просто хорошая практика, чтобы назвать супер реализации.

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

Кроме того, несколько раз вы хотите переопределить суперреализацию в некоторых случаях, например
onBackPressed(){
if(myFlag){
// do my stuff
}
else {
// Do usual stuff on Back pressed
super.onBackPressed();
}

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

+0

: Я согласен 100% – Sameer

+0

@TofeeqAhmad: спасибо, почему бы вам не проголосовать за мой ответ в этом случае :) – akkilis

+0

уверен :) :). +1 bro – Sameer

0

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