我也先上个图
挨个说:
onCreate: 创建 此时Activity还在后台,不可见。官方推荐在这块就做一些初始化工作,做别的工作就不规范
onStart: 启动 此时Activity已经可见,动画的初始化在此阶段处理比较好,但还是没有出现在前台,我们还看不到,无法与Activity进行交互
onResume:获取焦点,在这个阶段已经出现在了前台,并且可见,可以打开独占设备了
onPause: 暂停,失去焦点 程序状态的保存、独占设备和动画的关闭、以及一些数据的保存在这阶段做挺好
onStop:停止,Activity已经不可见了。但是Activity的对象还在内存中没有被销毁,这一阶段主要进行一些资源的回 收工作
onDestroy:这个阶段Activity被销毁了,不可见。与此同时将没释放掉的资源释放和进行一些回收工作
onRestart:重新开始,Activity在这个时候是可见的。当用户按Home键切换到桌面后又切回来或者从后一个Activity切回前一个Activity就会触发这个方法,这里一般不做什么操作
对于一些情况生命周期的流程:
正常情况 :
第一次启动Activity时候 :onCreate-->onStart-->onResume
点击返回退到桌面时依次用:onPause-->onStop-->onDestory
当点击Home键返回桌面时:onPause-->onStop,当我们点击Home键退回到桌面时并没有调用onDestory,因为此时 Activity只是处于后台不可见的状态,并没有被销毁。
当我们从后台切换到Activity时:onRestart-->onStart-->onResume 。 我们会发现并没有调用onCreate,因为此前Activity处于停滞状态,并没有被销毁所以不需要重新创建。但是值得注意的是当系统资源不足时会导致后台Activity被杀死。当Activity被杀死的时候,你去启动它你就会发现和第一次启动它的生命周期是相同的。
非正常情况 :(屏幕旋转)
Why屏幕旋转的时候我们发现Activity先是被销毁之后又被重建。而且我们还发现虽然Activity被重建了,但是控件里的内容还在?
这是因为当Activity不是正常退出的时候,它不仅调用onPause,onStop,onDestory,它会在调用onStop之前调用onSaveInstanceState这个方法来保存一些数据,当Activity重建的时候,这个方法所存储的数据会以Bundle作为参数传递给onCreate,所以我们可以用参数来判断这个Activity是新建的还是重建的,如果是重建的,则可以从Bundle中取出数据来恢复界面。 那我们可不可以不让他销毁并重新创建呢? 答案是肯定的,你只需要在AndroidManifest文件中的对应Activity中配置 android:configChanges="keyboardHidden|orientation|screenSize",最好这三个都配置,否则不能适配所有机型或sdk版本。
设置之后你会发现不会销毁和重新创建了,只会调用onConfigurationChanged这一个方法,所以我们可以在里面做一些特殊的操作。![]()
当然如果你不想让他旋转就在AndroidManifest文件中的对应Activity中配置android:screenOrientation=”landscape”(横屏,portrait是竖屏);
参考博客:https://www.jianshu.com/p/94e3ab2de108