Activity的生命周期

本文详细解析了Android中Activity的生命周期,包括onCreate、onStart、onResume等关键方法的作用及调用时机。特别关注了正常流程与屏幕旋转时的不同表现,并介绍了如何通过配置避免因屏幕旋转导致的Activity重建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我也先上个图




挨个说:

  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






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值