Activity生命周期经典图解:
按键对生命周期的影响:
BACK键:
当我们按BACK键时,我们这个应用程序将结束,这时候我们将先后调用onPause()->onStop()->onDestory()三个方法。
再次启动App时,会执行onCreate()->onStart()->onResume()
HOME键:
当我们打开应用程序时,比如浏览器,我正在浏览NBA新闻,看到一半时,我突然想听歌,这时候我们会选择按HOME键,然后去打开音乐应用程序,而当我们按HOME的时候,Activity先后执行了onPause()->onStop()这两个方法,这时候应用程序并没有销毁。
而当我们从桌面再次启动应用程序时,则先后分别执行了onRestart()->onStart()->onResume()三个方法。一般Activity切换正常生命周期(这里的一般是指启动模式为standard,切换activity时没有加flag标志):
ActivityA启动ActivityB:
ActivityA 的生命周期onPause()->onStop(),
ActivityB的生命周期onCreate()->onStart()->onResume()。
ActivityB执行finish返回ActivityA:ActivityB的生命周期onPause()->onStop()->onDestory()
ActivityA的生命周期了onRestart()->onStart()->onResume()
注意:当ActivityB定义为Dialog样式时,ActivityA的生命周期是不一样的,
我们给ActivityB加上theme
<style name="MyDialogStyle"> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowFrame">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsFloating">true</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <item name="android:backgroundDimEnabled">true</item> </style>这个时候,ActivityA启动ActivityB,B没有完全遮挡A,ActivityB的生命周期跟刚才一样,但是ActivityA并没有执行onStop()
还有一点需要特别注意,Activity中直接弹dialog,Acitivity的生命周期是不会变化的。网上有些说法是会执行onPause(),其实并没有执行!
还有几个命周期相关的方法需要特别注意
@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); }
这个在以后的启动模式讲解和屏幕切换状态保持的讲解中再详细说明。