应用启动模式和生命周期

启动模式

standard
  标准模式,多实例,每次启动创建一个新的Activity,系统默认。旧Activity会保存在栈里,新Activity会入栈,成为栈顶Activity。

singleTop
  栈顶复用模式,有新的启动请求时,只有目标Activity处于栈顶的时候,才会只调用onNewIntent()而不会创建新实例,其他情况和standard一致。

singleTask
  栈内复用模式,在启动的时候先查找它的taskAffinity属性(taskAffinity属性代表它所属的栈)相等的任务栈里是否存在实例,如果存在,它就会在这个任务中调用onNewIntent()启动并将这个任务栈上面的任务销毁,使当前任务成为栈顶任务。否则就会在等于它自身taskAffinity属性的任务栈里新建一个实例。如果要在新任务重启动设置了singleTask模式的Activity则要为它设置一个独立的taskAffinity。总结一句话就是:一个task里只有一个singleTask的实例。

singleInstance
  和singleTask相比不同点在于它会单独占用一个栈,整个应用只有这一个实例。

栈中可能的情况:
  情况1:
在这里插入图片描述
   在情况1的时候跳转到SingleTopActivity会变成下面这样:
   情况2:
在这里插入图片描述  
  在情况2的时候如果用两个不同的TaskAffinity建立两个SingleTaskActivity会变成下面这样:
  情况3:
在这里插入图片描述


生命周期

主要的生命流程:
在这里插入图片描述

标准情况下:

  • 第一次打开Activity流程:onCreate()->onStart()->onResume()
  • home按键流程:onPause()->onStop()
  • 返回按键流程:onPuse()->onStop()->onDestroy()
  • 从其他应用切换回来流程:onRestart()->onStart()->onResume()
  • 旋转屏幕:onPause-onStop-onDestory-onCreate-onStart

方法说明:
onCreate():创建,之后进入的ceated状态是瞬间的。在这里进行活动的初始化操作,有seContentView(),findViewById(),内容提供器的查询。在onCreate()之后就可以调用finish()主动去销毁了,不必等到onStart(),在这里也必须要调用父类的构造方法。这里面还有一个参数onSaveInstancState,这里只适合存储较少的数据,也不能存储bitmap,一般在切换暗色模式、横竖屏切换等时候保存临时参数和配置数据。
onStart():在这里可以进行一些可见的操作,如动画的绘制。如果很久之后再从其他应用返回来,可能有些资源已经被回收了,这时候可以在这里判断一下资源是否还可用。
onResume():在onRestoreInstanceState()(是在onResume之后调用的一个方法图中省略了)之后调用,这个调用之后就表示Actvitiy已经是一个活动的Activity了显示给用户并且准备好接收输入。
onPuse():应该在这里停止动画或其他正在运行的操作、提交用户离开时期待组队自动保存的内容(存档、草稿),释放系统资源,如广播、sensord(如gps)。如果在onPause()做了太多耗时操作则会导致下一个Activity的启动很慢。在从A跳转到B的过程生命周期为:A.onPause()->B.onCreate()->B.onStart()->B.onResume()->A.onStop()(B为不透明页面时A会执行onStop)。
onStop():看不到应用的时候,做一些heavy-load的事情。也可以停止动画、停止刷新UI和停止一些其他的可见的事情。避免内存泄漏。
onRestart():只有在Stoped状态才能被调用。
onDestroy():销毁。在这里做所有的清理工作。

参考文档:
https://blog.csdn.net/mynameishuangshuai/article/details/51491074
https://www.w3cschool.cn/android_training_course/android_training_course-m5xn27e0.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值