覆盖功能的Android Activity必须调用super。*

时间:2012-01-17 09:41:20

标签: java android android-activity function-overriding

在创建自己的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应该放在哪里 Locations of super() calls in Android Eclipse Plugin generated code reliable?

4 个答案:

答案 0 :(得分: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 :(得分:4)

调用超级实现只是一个很好的做法。

有些时候它是强制性的,比如“onCreate()”,否则在这种情况下会有一个“ActivityInstantiateingexcepetion”。 />
另外,有时你想在某些情况下覆盖超级实现,例如
onBackPressed(){
if(myFlag){
// do my stuff
}
else {
// Do usual stuff on Back pressed
super.onBackPressed ();
}

所以这样,如果你的“myFlag”将是真的,你的东西将完成其他正常onBackpressed将被执行。

答案 2 :(得分:2)

它的所有Activity类方法。在Java和Android中,如果您调用superclass方法,则必须编写super.methodName

答案 3 :(得分:0)

所有这些方法都应该调用super.method()我认为