问题
When creating own Activity subclass, we are overriding some of the basic Activity lifecycle functions.
In which of these we must call super implementation, where we should and where is it only good manner ?
// 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();
List of methods is not final, feel free to add more functions, where we should know, what to do.
For those who are interested in, where should be super.methodName placed
Locations of super() calls in Android Eclipse Plugin generated code reliable?
回答1:
must:
onCreate(Bundle savedInstanceState);onStart();onRestart();onResume();onPause();onStop();onDestroy();onPostCreate(Bundle savedInstanceState);onPostResume();
should / shouldn't: (may be helpful to call superclass method, unless you manage activity's state or deliberately alter activity's behavior yourself - in such case it may be harmful)
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);
Actually, when overriding any method, it's a good practice to look at the source code of the overridden class and see what exactly this method does.
回答2:
Its just a good practice to call the super implementation.
BUT some times its mandatory, like in "onCreate()", else there will be an "ActivityInstantiateingexcepetion"in this case.
Also, some times you want to override the super implementation in some cases, like onBackPressed(){
if(myFlag){
// do my stuff
}
else {
// Do usual stuff on Back pressed
super.onBackPressed ();
}
So this way if your "myFlag" will be true, your stuff will be done else normal onBackpressed will be executed.
回答3:
Its all Activity class method.In Java and Android if you call superclass method ,You must write super.methodName
回答4:
all these methods should call super.method() I think
来源:https://stackoverflow.com/questions/8892383/android-activity-which-overridden-functions-must-call-super