2012-01-17 17 views
11

Quando si crea la propria sottoclasse di attività, si annullano alcune delle funzioni di base del ciclo di vita delle attività.Attività Android che le funzioni sostituite devono chiamare super. *

In quale di questi abbiamo must chiamata eccellente implementazione, dove abbiamo dovrebbe e dove si solo buon modo?

// 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(); 

Elenco dei metodi non è definitiva, sentitevi liberi di aggiungere altre funzioni, in cui dovremmo sapere, che cosa fare.


Per coloro che sono interessati a, dove dovrebbe essere collocato super.methodName
Locations of super() calls in Android Eclipse Plugin generated code reliable?

+0

Android lancia una RuntimeException se si dimentica di chiamare il metodo super anche se sarebbe necessario. – Flo

+0

Superclasse in FIRST: 'onRestoreInstanceState, onStop, onRestart, onStart'. Superclasse su LAST: 'onDestroy, onPause, onSaveInstanceState, onResume'. –

risposta

6

must:

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

dovrebbe/non dovrebbe: (può essere utile per chiamare il metodo della superclasse, a meno che non si riesce lo stato di attività o deliberatamente modificare il comportamento di attività da soli - in tale caso può essere dannoso)

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

In realtà, quando si esegue l'override qualsiasi metodo, È una buona pratica osservare il codice sorgente della classe sottoposta a override e vedere cosa fa esattamente questo metodo.

+1

ottimo, almeno tu, hai risposto alla mia domanda :) Grazie –

+2

benvenuto, Marek) –

+0

spiegheresti come hai classificato questi metodi in "deve" e "dovrebbe"? Sono un principiante e sto cercando di capire come capire quali metodi dovrebbero avere una chiamata a super(). Non voglio solo ricordare e ricordare quando necessario ... Voglio capire come scoprirlo – vicky96

2

Tutti i suoi Activity classe method.In Java e Android se si chiama superclass metodo, è necessario scrivere super.methodName

4

È solo una buona pratica chiamare la super implementazione.

MA alcune volte è obbligatorio, come in "onCreate()", altrimenti in questo caso ci sarà una "AttivitàInstantiateingexcepetion".

Inoltre, in alcuni casi, si desidera sovrascrivere la super implementazione, ad esempio

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

Così in questo modo se il tuo "myFlag" sarà vero, le tue cose saranno fatte altrimenti normale suBackpressed verrà eseguito.

+0

: sono d'accordo al 100% – Sameer

+0

@TofeeqAhmad: grazie, perché non voti la mia risposta in questo caso :) – akkilis

+0

sicuro :) :). +1 bro – Sameer

0

tutti questi metodi dovrebbero chiamare super.() metodo credo

Problemi correlati