Android面试一天一题——Activity考察点之启动模式

来源:互联网 发布:数据分析毕业论文题目 编辑:程序博客网 时间:2024/05/24 07:23

    Activity作为Android开发中最基础的部分,面试中经常会遇到。由于其所含知识点并不繁杂且在实际开发中会经常使用到,所以如果在面试时没有将相关问题回答好,会很影响最终的整体成绩。我们在接下来的文章中将主要讨论三个考察点:1.Activity的启动模式(除了需要详细介绍几种启动模式的含义外,通常还会引出如何选择适当的启动模式以及任务栈的相关问题);2.Activity的生命周期(通常会需要你回答在某个回调方法中可以做什么操作,不可以做什么操作等一些容易混淆的问题);3.Activity的状态保存和恢复。今天我们先说Acitivity的启动模式。

    1.Activity的启动模式

在介绍Activity的启动模式前,我们有必要先了解一下Activity的“家”——任务栈。任务栈中的“任务”指的是用户使用某个APP所要达到的目标,比如使用微信给女朋友发消息就是一个“任务”,在我们完成这个任务的过程,我们依次启动了登录页(第一次登录)--> 主页 --> 聊天页,假设这些页面都是Activity的话,它们就会按照启动顺序依次被push到属于微信的任务栈中,而我们在持续使用过程中的点击进入页面和返回上一级的操作,实际上就是任务栈的入栈和出栈操作。那么任务栈和运行中的APP是一一对应的关系么?答案是否定的,一个APP的Activity可以属于不同的任务栈,同样,一个任务栈的Activity可以来自于不同的APP,这种情况通常是需要多个APP配合完成任务,例如有些APP中使用了XX地图等。记住以上几点对掌握接下来的启动模式是很有必要的。

        a.standard启动模式

        默认的启动模式,每次使用该模式下的Activity都会创建一个新的Activity实例并push到任务栈中,这样就可能会出现一个任务栈中存在同一Activity的多个实例的情况。考虑一下,这样做什么好处和坏处呢?好处是使用简单,不需要额外配置,如果Activity比较轻量级那么用这种模式一般不会出现什么问题;坏处是,如果创建实例太过频繁或者Activity的开销较大,那么这种启动模式就很有可能带来性能问题,还有就是,在使用某些APP时,偶尔会出现使用BACK键返回,结果一直在几个页面来回切的情况,这有可能就是启动模式的选择有问题。

        b.singleTop启动模式

        栈顶复用模式,也就是说,当你想启动Activity A 时,如果目标任务栈中已经存在Activity A 且位于栈顶,那么系统就不会再次实例化它,而是直接使用栈顶的Activity A。这样有个好处,不会出现由于栈顶都是相同Activity而导致用户出现BACK键失灵的错觉。那么在什么情况下使用singleTop模式呢?比如某个APP的多个推送消息显示在通知栏,你想把他们都给点了,每次点击实际就是启动某个Activity,这时候如果使用的是singleTop模式,就可以有效避免重复创建同一Activity实例的工作。

        c.singleTask启动模式

    官方解释为:标志为singleTaskActivity,最多仅有一个实例存在,并且位于以它为根的Task中,所有对该Activity的请求,都会跳到该ActivityTask中展开进行。如果我们使用时,该Activity不在栈顶,那么位于它上方的Activity就会全部出栈,从而使其回到栈顶。什么时候该模式呢?我们一般在创建开销较大且经常被其他APP调用的Activity中使用,这种Activity一般作为程序的入口,比如浏览器的主页使用的就是singleTask。

        d.singleInstance启动模式

         singleInstance模式和singleTask很相似,他们的不同点仅在于,该模式下的Activity是它所属任务栈中的唯一Activity。可以看出,这样的Activity封闭性极强,能够很好地保持唯一性,也能大大减少不必要的开销。一个应用的例子就是XX地图,如果APP中使用了XX地图,那么当我们切到桌面,并进入到XX地图时,看到的页面跟之前是一样的。


    

0 0
原创粉丝点击