Java 重写函数的Android活动必须调用super*

Java 重写函数的Android活动必须调用super*,java,android,android-activity,overriding,Java,Android,Android Activity,Overriding,在创建自己的活动子类时,我们覆盖了一些基本的活动生命周期函数 在哪种情况下,我们必须称之为超级实现,我们应该在哪种情况下称之为超级实现,只有良好的方式才是超级实现 // base lifecycle onCreate(Bundle savedInstanceState); onStart(); onRestart(); onResume(); onPause(); onStop(); onDestroy(); finalize(); onUserLeaveHint(); // instance

在创建自己的活动子类时,我们覆盖了一些基本的活动生命周期函数

在哪种情况下,我们必须称之为超级实现,我们应该在哪种情况下称之为超级实现,只有良好的方式才是超级实现

// 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
放置在哪里

它的全部
活动
类方法。在Java和Android中,如果调用
超类
方法,则必须编写
super.methodName

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

但有时它是必需的,如“onCreate()”,否则会出现“ActivityInstanceIngeException”在这种情况下。

此外,有时您希望在某些情况下覆盖超级实现,例如

onBackPressed(){
if(myFlag){
//做我的事
}
否则{
//做常用的事,在backpressed上
super.onBackPressed();
}

这样,如果您的“myFlag”为真,您的工作将完成,否则将执行正常的onBackpressed。

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

  • onCreate(Bundle savedInstanceState);
  • onStart();
  • onRestart();
  • onResume();
  • onPause();
  • onStop();
  • onDestroy();
  • onpostreate(Bundle savedInstanceState);
  • onPostResume();
应该/不应该: (调用超类方法可能会有帮助,除非您自己管理活动的状态或故意改变活动的行为-在这种情况下可能有害)

  • onSaveInstanceState(Bundle savedInstanceState);
  • onRestoreInstanceState(Bundle savedInstanceState);
  • onBackPressed();
  • onCreateContextMenu(ContextMenu,View v,ContextMenuInfo menuInfo);
  • onCreateOptions菜单(菜单菜单);
  • onOptionsItemSelected(菜单项);
  • onContextItemSelected(菜单项);
  • onMenuItemSelected(int-featureId,MenuItem项);

实际上,在重写任何方法时,最好查看被重写类的源代码,看看这个方法到底做了什么。

如果忘记调用超级方法,Android会抛出RuntimeException,尽管这是必要的。超类首先:
onRestoreInstanceState،onStop,onRestart,onStart
。超级类终于出现了:
onDestroy、onPause、onSaveInstanceState、onResume
@TofeeqAhmad:谢谢,你为什么不在这种情况下投票支持我的答案:)太好了,至少你回答了我的问题:)谢谢你能解释一下你是如何将这些方法分为“必须”和“应该”的吗?我是一名初学者,我正在努力了解如何找出应该调用super()的方法。我不想在需要时仅仅记住和回忆…我想了解如何找出答案我已经稍微更新了答案。基本上,有一些方法你必须调用(您可以从方法的描述、Lint提示或异常中了解它)以及以某种方式影响活动/片段行为的方法。最初的超类:
onrestoreinnstancestate;
。最后的超类:
onDestroy,onPause,onSaveInstanceState,onResume