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
。