Activity的生命周期实践

我将带头冲锋!

网上好多讲activity的生命周期的帖子,相信大家都看了好多遍,我也看了无数遍,但是好记性不如烂笔头、实践出真知、动了手才是自己的。。。相关的谚语太多了,哈哈,其实就是总结实践一下,怕自己忘。

关于activity基本上面试的第一个问题除了自我介绍就是说一下生命周期了,我相信每个搞安卓的都知道,onCreate、onStart。。。所以这部分的知识还是很重要的,本文将从以下几个方面进行总结

目录

activity的生命周期、包括正常生命周期和异常生命周期

1. activity的生命周期

1. 启动MainActivity

2. MainActivity返回桌面

3.重新回到MainActivity

4. 杀死后台进程重新进入MainActivity

5. 按返回键退出MainActivity

6. MainActivity跳转到MainActivity

7. 跳转到SecondActivity(正常主题)

8. 跳转到SecondActivity(在onPause中进行比较耗时的操作)

9. 跳转到透明主题的SecondActivity

异常生命周期:

1. 系统配置项的改变,横竖屏切换等等啦

MainActivity竖屏切换到横屏:

SecondActivity竖屏切换到横屏:

2. 系统内存不足把Activity回收了

 


activity的生命周期

1. activity的生命周期

基本知识点就不概述了,相信大家都背的滚瓜烂熟了

简单说一下整体的实现:

定义了四个activity,每一个都有两个按钮进行跳转本身还有跳转下一个(Main跳Second跳Third跳Fourth)至于启动模式下面再进行说明:

正常生命周期无外乎就是activity进入,退出,跳转到新界面

测试结果:

1. 启动MainActivity

2. MainActivity返回桌面

3.重新回到MainActivity

4. 杀死后台进程重新进入MainActivity

疑问1:onDestroy没有走,这里应该是进程被杀死了,走还是要走的,但是日志就打印不了了,这个是不是应该算是异常的生命周期了,不应该算是正常生命周期的流程

5. 按返回键退出MainActivity

6. MainActivity跳转到MainActivity

7. 跳转到SecondActivity(正常主题)

疑问2:这里面如果MainActivity的onPause方法比较耗时会怎么样,

8. 跳转到SecondActivity(在onPause中进行比较耗时的操作)

这里皮一下:


for (int i = 0; i < 10000; i++) {
    String text = "不是说创建对象比较耗时嘛?";
    text += "不是说拼接字符串耗时嘛?";
}

 

还是一样的,说明跳转的时候是一定会先走onPause方法的,还是说我并不耗时,于是我作死的试了一下我认为比较大的数,场面过于血腥,我就不说结果了。

但是我没忍住还是放出了血腥的画面,我把循环次数提高到了1000W,这个数就有点恐怖了,目前我除了玩变态版的游戏接触过这么大的数,还没见过呢(啥时候我能挣这么多钱呢)

循环10000次的时候是这样的:

循环1000W次是这样的:

界面明显可以看到卡了,onPause快跑了3s,但是还是在SecondActivity的onCreate之前,没跑了,就是先走onPause,要是耗时的话后面的也都得等着,这又说明了一个问题onPause里面虽然可以进行数据的回收啊,巴拉巴拉,但是尽量别太耗时,比如循环1000w次

9. 跳转到透明主题的SecondActivity

设置透明的代码:

android:theme="@android:style/Theme.Translucent"

MainActivity的onStop确实没走

基本正常情况的Activity的生命周期的场景我也就想到这么多了,水平一般能力有限,如果有补充的欢迎留言,做第一个坐我沙发的人

异常生命周期:

1. 系统配置项的改变,横竖屏切换等等啦

这里面我把SecondActivity添加配置项,而MainActivity保持不变

不让Activity在横竖屏或者其他配置项改变的时候配置如下,以常用的横竖屏切换为例:

android:configChanges="screenSize|keyboard|orientation"

MainActivity竖屏切换到横屏:

我又添加了一个EditText,输入了一些文本,然后横竖屏旋转:

文本并没有保留。我给EditText设置了一个id之后发现文本是可以保存了,这里是一个知识点!

SecondActivity竖屏切换到横屏:

在SecondActivity中也有一个EditText,但是可以看到,并没有走onSaveInstanceState 和onRestoreInstanceState,配置了ConfigChanges就不会重新创建新的实例并且也不会保存数据了,很好理解,因为相当于之前的实例没有销毁,还是可以用之前的。

2. 系统内存不足把Activity回收了

这个暂时没有模拟出来。尴尬,我再想我再Activity里面想办法内存泄露是不是可以呢?

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值