为了账号安全,请及时绑定邮箱和手机立即绑定

【学习打卡】第1天 Android 基础 Activity 的启动模式以及异常情况下 Activity 的生命周期

标签:
Android

课程名称:BAT大牛亲授技能+技巧 Android面试快速充电升级
课程章节:Android基础相关面试问题
主讲老师:DocMike

课程内容

Activity 的启动模式

<activity>标签的launchMode属性可以设置为四种不同的模式:

    standard(默认模式)  
    singleTop  
    singleTask  
    singleInstance

这几种模式的区别体现以下四点上:

  • 1.当这个activity被激活的时候,会放入哪个任务栈
    对于“standard”和“singleTop”模式,这个新被激活的activity会放入和之前的activity相同的任务栈中,除非如前所述,Intent对象包含FLAG_ACTIVITY_NEW_TASK标志。但“singleTask”和“singleInstance”模式则表示这个新被激活的activity不会放入已经存在的任务栈中,它会重新开启一个任务栈,并作为这个新的任务栈的根activity。

  • 2.是否可以存在这个activity类型的多个实例
    对于“standard”和“singleTop”模式,可以有多个实例,并且这些实例可以属于不同的任务栈,每个任务栈也可以包含有这个activity类型的多个实例。但“singleTask”和“singleInstance”模式则表示至多只可以存在这个activity类型的一个实例。又因为有第一点必须是根activity的限制,所以这意味着在同一时间,在手机上绝不会存在多于一个的由这个activity启动的任务栈。

  • 3.包含此activity的任务栈是否可以包含其它的activity
    “singleInstance”模式表示包含此activity的任务栈不可以包含其它的activity。若此activity启动了另一个activity组件,那么无论那个activity组件的启动模式是什么或是Intent对象中是否包含了FLAG_ACTIVITY_NEW_TASK标志,它都会被放入另外的任务栈。在其它方面“singleInstance”模式和“singleTask”模式是一样的。其余三种启动模式则允许包含此activity的任务栈包含其它的activity。

  • 4.每一个activity实例处理一个intent
    对于默认的“standard”模式,每当响应一个Intent对象,都会创建一个这种activity类型的新的实例。即每一个activity实例处理一个intent。对于“singleTop”模式,只有当这个activity的实例当前处于任务栈的栈顶位置,则它会被重复利用来处理新到达的intent对象。否则就和“standard”模式的行为一样。正如第二点所说的,“singleTask”和“singleInstance”模式表示只能有一个实例,所以这个唯一的实例需要处理所有新到达的intent对象。又由于“singleInstance”模式的activity实例总是位于任务栈的栈顶,所以这样做很正常。但对于“singleTask”模式的acitvity,在其上面可能存在其它的activity组件,所以它的位置并不是栈顶,在这种情况下,intent对象会被丢弃。(虽然会被丢弃,但是这个intent对象会使这个任务栈切换到前台)

如果一个新到达的intent对象是被一个已经存在的activity组件来处理的,那么这个activity的onNewIntent(android.content.Intent)方法会被系统调用。

注意:若为了处理一个新到达的intent对象而创建了一个activity实例,则用户按下“BACK”键就会退到之前的那个activity。但若这个新到达的intent对象是由一个已经存在的activity组件来处理的,那么用户按下“BACK” 键就不会回退到处理这个新intent对象之前的状态了。

异常情况下 Activity 的生命周期

当 Activity 发生异常时(通常是配置发生改变或内存不足时),会调用 onSaveInstanceState()方法,在这个方法中可以通过使用 Bundle 进行数据保存。

当 Activity 被重新创建后,会调用 onRestoreInstanceState()方法进行数据的恢复,在这个方法中会通过回调的方式,获取到在onSaveInstanceState()方法中保存的 Bundle,也会把这个 Bundle 回调给 onCreate() 方法。

onSaveInstanceState()方法和 onRestoreInstance()方法只有在 Activity被异常销毁或重建的时候,才会调用,通常会选取 onCreate()方法和 onSavaInstance()方法中的一个进行数据的恢复,由于onRestoreInstanceState() 的调用时机是在 onStart()之后,onResume() 之前,并且调用 onRestoreInstance() 时,Bundle 一定非空,更建议使用 onRestoreInstance()来恢复数据。

课程收获

这一章的内容是关于 Android 基础的,而 Activity 的内容更是基础中的基础,在面试时通常会作为开始的热身问题。平时更多关注的是正常情况下 Activity 的生命周期,很少去留意异常情况下 Activity 的生命周期。这一章的内容正好补充了这一块,无论是否要面试,过一遍这一章内容,相信在 Activity 的知识上就没有什么短板了。


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
移动开发工程师
手记
粉丝
11
获赞与收藏
16

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消