安卓整体梳理一(生命周期和启动模式)

生命周期和启动模式是安卓最最基础的部分,这里简单梳理下并做记录,

Activity生命周期

典型情况下指的是再用户的正常使用过程中,activity的生命周期变化,而异常情况指的是activity因为内存等因素被系统回收,或者因为设备的configuration发生变化(如横竖屏切换)导致activity被销毁重建。

一、典型情况的生命周期

针对上图的经典生命周期,这里有几点特别说明:

  • 当用户跳转新的activity,短暂离开当前activity,当前activity回调  onPause--onStop 退至后台
  • 当用户紧接着返回来时,当前activity回调 onRestart--onStart--onResume回到前台
  • onStart、onStop是回调表示activity是否可见,onResume、onPause回调表示activity是否位于前台
  • A跳转 B,生命周期顺序是 onPause(A)--onCreate(B)--onStart(B)--onResume(B)--onStop(A),这也就是为什么onPause不能做耗时操作,他是影响后面新页面的展示的,耗时操作会造成页面切换的卡顿。

二、异常情况的生命周期

针对上图的意外情况下生命周期,有几点说明:

  • Activity被销毁后,onPause、onStop、onDestroy会被依次调用,onSaveInstanceState调用在onStop之前
  • Activity被重建后,系统会在onStart之后回调onRestoreInstanceState,接收到onSaveInstanceState保存的Bundel对象,另外onCreate也能接收到这个对象,但是需要判空,而onRestoreInstanceState一旦被调用,就表面一定是发生了意外情况,所以他的Bundle必然不是空的
  • 在内存资源不足的导致低优先级的Activity被杀死(优先级排序  前台Activity(与用户交互)>可见但并非前台(被对话框挡住的Activity)>后台Activity(比如执行了onStop的))
  • 针对手机配置变化导致的Activity销毁重建,可以在menifest文件配置acitiviy的 configconges属性,常用的有 locale、orientation、keyboardHidden三个,制定这些属性后,再发生这样的配置变化的时候,Activity不会销毁重建,onSaveInstanceState和onRestoreInstanceState也不会调用,取而代之的是Activity的onConfigrationChanged方法。

Activity的启动模式:

四种模式:

这里先说明一下Activity的任务栈,默认情况下,Activity所需的任务栈名字是应用的包名,当然我们也可以为每个Activiy指定任务栈(通过menefest文件为Activity添加taskAffinity属性指定一个不同的栈名,一般只是针对singleTask模式)

  1. standard:标准模式,也是系统的默认模式,每次启动都会在启动Activity的栈中创建一个新的实例
  2. singleTop:栈顶复用,如果目标Activity已经处在栈顶,那么不会被重新创建只会调用onNewIntent,
  3. singleTask:栈内复用,singleTask是可以指定taskAffinity指定所需栈的,在启动的时候就会先判断是否存在所需栈(没有指定的话就是包名栈),如果存在所需栈,进一步判断栈里是否有已存在实例,如果存在,就会以clearTop的方式升至栈顶并调用onNewIntent,如果没找到实例就创建一个新的实例,而如果不存在所需的栈,就创建一个所需栈,然后创建一个新的实例压入栈中
  4. singleInstace:单实例,这是一种加强的singleTask,他除了具有singleTask的所有特性,还加强了一点,就是具有这种模式的Activiy都只能单独的位于一个栈中,也就是首次创建的时候,会为他创建一个新的任务栈然后创建一个新的实例,且由于栈内复用的特性,之后的请求都不用再创建新的Activiy了,除非这个任务栈被销毁

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值