activity_生命周期

一. 首先,贴出官方给出的activity生命周期图。

 

二. 各个生命周期介绍:

1. onCreate()

正常启动执行。为展示界面做的准备工作。所以一般设置布局,获取数据都在这个方法里调用。

当某个activity启动了其他activity,这时由于内存不够,系统把上个activity给回收了,这时返回上个activity,会重新执行该方法。这时候可能需要取出一些初始值。

2. onRestart()

正常启动不执行。但某个activity执行onStop方法后,下次显示的时候就会执行该方法。

3. onStart()

正常启动执行。一般少用该生命周期执行任务。

4. onResume()

正常启动执行。在每次页面显示到最上层时都会执行。

官方建议在该声明周期,尽量少做耗时操作。个人建议,除非必须在该生命周期控制,否则不写任何逻辑,具体原因,下面分析。

5. onPause()

页面被覆盖或消失时执行。当从该activity跳转到其他activity时(或者按下home键,或者在该activity弹出里的弹框),会执行该生命周期。

6. onStop()

页面被覆盖或消失时执行。紧跟onPause()之后执行,但是在该activity里弹出一个弹框不会执行,获取启动的activity是透明主题,也不会执行该方法。

7. onDestroy()

页面被销毁时执行。例如按返回键。

三. activity A启动activity B,这两个activity的生命周期执行过程。

1. 首先打开activity A:activity A执行:

onCreate();

onStart(); 

onResume();  

2. 这时候,从activity A跳转打开activity B。

activity A执行:

onPause();

B执行:

onCreate(); 

onStart(); 

onResume(); 

最后A执行:

onStop();

3. 这时候点击返回键,返回activity A。

B执行:

onPause();

A执行:

onRestart();

onStart();

onResume();

最后B执行:

onStop();

onDestroy();

4. 总结:

从A打开B,不是A结束后才打开B,而是B打开以后才结束A。

从B返回A,不是B结束后才返回A,而是返回A以后才结束B。

这个过程很重要,在实际开发中,有时要在全局记录activity栈,这时候对栈里面保存的activity操作的时候就要注意他是否已经存在,他是否已经移除。


5.相关知识:

从activityA打开activityB,是A先pause,然后B执行onCrate,onStart,onResume,最后A才onStop。

这个启动顺序是Android系统开启activity的机制造成的。Android系统管理activity的服务是:ActivityManagerService(简称AMS),这个服务会维护一个activity栈里所有activity的状态同步(也就是统一管理这些activity的生命周期)。看系统源码可以发现,该服务是把栈顶的activity暂停之后,才会开启下一个要显示的activity。

所以建议在onPause方法里尽量不要写逻辑代码,这样有利于下个activity更快的显示出来。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值