Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Activity which overridden functions must call super.*

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?

like image 818
Marek Sebera Avatar asked Jan 17 '12 09:01

Marek Sebera


2 Answers

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.

like image 168
a.ch. Avatar answered Sep 27 '22 17:09

a.ch.


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.

like image 21
akkilis Avatar answered Sep 27 '22 16:09

akkilis