【Android】生命周期

Activity生命周期调用的理解

状态

活动存放在一个叫返回栈的一个集合,当重新打开一个Activity时,它就会出现在栈顶。当要销毁该活动时,调用finish()或back,栈顶的活动就会出栈。

  • 运行状态:一个活动处于栈顶时
  • 暂停状态:不处于栈顶,但仍然可见。(失去焦点,非全屏或透明的activity放置在栈顶)
  • 停止状态:不处于栈顶,也不可见,但还是会为它保留一些变量的相关数据。(被覆盖)
  • 销毁状态:在栈中移除(killed状态)
    四种状态转换

启动模式

  1. standard模式:Activity的默认启动模式。对Activity的启动和切换没有任何限制,任何时候我们通过startActivity或startActivityForResult()启动一个standard模式的activity时,系统都会创建实例并放置到栈顶。【通过intent跳转的时候会创建新的activity实例,重复创建】
  2. singleTop模式:设置成该模式时
    ,任务栈的栈顶不能同时存在两个Activity的实例。但在整个栈中,可以存在多个实例。防止同一个Activity重复创建或启动多次【通过intent跳转的activity在栈顶,直接复用;若栈顶没有,重新创建】
  3. singleTask模式:整个任务栈中只能存在该activity的一个实例。重复启动时,系统会销毁该实例之前的所有其他activity,将该activity移至栈顶。【app在启动时都会创建一个任务栈,应用内被创建的activity都会放进这个栈内。只要activity实例被创建过,再次创建时都直接复用已有实例】
  4. singleInstance模式:该模式下的Activity都将独立存在一个任务栈下,并且不能重复创建或启动。当启动一个singleInstance模式的Activity时,系统会为应用创建一个新的前台任务栈,将Activity置于栈内。【整个Android系统中实例唯一,可以让别人的程序直接复用这个Activity】

其他时候要启动其他非singleInstance模式的Activity时,系统创建另一个前台任务栈,将非singleInstance模式的Activity按照启动顺序置于前台任务栈。将singleInstance模式的Activity所在的任务栈移至后台。之后启动任何Activity都是前后台任务栈的切换。

重复启动同一个singleInstance模式的Activity时,系统将Activity所在的任务栈切换至前台,而启动其他类型Activity,不需要切换任务栈,添加新实例即可。


操作APP时生命周期调用

  • 点开Activity,按Home键回到主屏:onPause() , onStop()
  • 主屏,再次点击App回到Activity:onRestart() , onStart() , onResume()
  • 在A Activity上打开 B Activity:A onPause() , B onCreate() , B onStart() , B on Resume() , A onStop()
  • 点击Back键:onPause() , onStop() , onDestroy()

Activity异常生命周期

异常生命周期:Activity被系统回收或当前设备的Configuration发生变化(横竖屏),导致Activity被销毁重建

Configuration发生变化导致Activity被杀死并重建

参考别人测试结果

  • onSave【Restore】InstanceState():系统自动调用,配置发生变化,Activity被异常销毁,用于存储数据(时机在onStop之前)。调用onRestore,把通过onSave保存的Bundle对象作为参数传给onRestore和onCreate。正常销毁,并不会调用这两个方法。
  • onRestore和onCreate的区别:都可进行数据恢复。但是onRestore一旦被系统回调,其Bundle一定不为空,无需额外的判断。但onCreate会出现为空的情况,当Activity为正常启动时,Bundle就会为空,需要额外判断。

使Activity在系统配置发生变化后不重建:给Activity指定configChange属性【orientation, screenSize】。orientation对应API < 13 , screenSize 对应API > 13 。设置之后,横竖屏切换时,不会再重建,取而代之是回调onConfigurationChanged

内存不足导致低优先级的Activity被杀死
  • 内存不足,按照一定优先级杀死目标Activity的进程来回收内存。onSave会被调用用于存储数据,在后续恢复会调用onRestore恢复数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值