天天看点

[Android]Android Activity 启动模式详解

一句话区别:standard,需要即new对象,不管对象是否存在,single模式可以复用对象。运行模式与线程和 进程均没有什么关系,与使用场景有关系。

最近有群里的朋友问我 activity的四种启动模式分别是什么意思? 当初因为项目比较忙,草草的解释了下, api文档中说的也只是一般,在这里就小记一下吧,以便有更多的朋友对activity启动模式了解深刻一点。度娘的时候 就可以找得到不需要在 问人了。如果不了解的话,简单的几句也说不清晰。

    activity 四种启动模式,分别为:standard 、singletop、singletask、singleinstance。

    一 :

          standard 模式:这个就没有什么好说的了,android默认activity启动的模式 就是 standard,如果有3个 activity,act1,act2,act3, 如果从act1 启动到act2 ,在启动到act3,那么android 的任务栈(task stack)分别为 act1、act2、act3,act3 在栈顶,如果此时按手机返回键,则需要返回3次才能返回到桌面(假设是从桌面启动的demo),任务栈分销毁掉 act3,act2,最后act1 。

   二 :

        singletop模式:

           实验效果:

           singletop模式:该启动模式和standard模式相差不多,任务栈分配也很相似,如:现有 act1,act 2,在act2 清单文件中配置 android:launchmode="singletop" ,其他都是默认standard 模式, 若从桌面启动该实验demo,从act 1,到act2 ,那么任务栈则分配为,act1,act2,此时该任务栈和 standard 模式任务栈分配则完全相同,接下来则说明不同的地方,如果在act2 界面中 启动 到act1, 此时的 任务栈 情况则为 act1,act2,act1,在由act1 启动到act2,在启动到act2,进行多次启动,(在act2界面)任务栈的情况则为,act1,act2,act1,act2,栈顶的act2 则不会重新创建,则会复用act2 该 activit, 依次类推。

          理论知识:

                 singletop,如果任务栈的栈顶元素是要被激活的组件,不会创建新的activity放在任务栈,而是会复用栈顶的activity。 如果发现栈顶的元素不是要激活的activity,就会创建新的activity 放置到任务栈里面

          singletop模式应用场景 :

                 app程序中(或浏览器中)保存的书签,假如用户看到一个界面保存自己喜欢的标签,假如要保存10个,这个时候用户在返回键的时候,则会返回10次才能返回到app应用中, android下singletop 则解决该问题。

三  

           singletask 模式 :

               实验效果 相差不大,实验内容就不多说了,自己可以写个小demo,两个activity,每个activiy 有两个button,可以相互启动 打日志去动手查看,会理解更加深刻,可以参照着 singletop模式去实验,以下只是讲解下 和singletop的区别:

            区别如下:(理论知识)

                  singletask 操作模式,一般和singletop操作模式类似,如果他发现任务栈里面已经有了要启动的这个activity,他会清空这个activity所在的任务栈上面的所有activiy,然后直接复用这个已经存在的activity 。

            应用场景:

                    如果一个app中,有一个功能需要加载网页内容 ,打开一个 browseractiviy现在网页内容,则内存开销非常大,首先要初始化webkit /c++ 嵌入式浏览器内核broweractivity 配置了singletask,空间换时间,使用该模式可以节省内存开销。

四 :   

            singleinstance 模式 :

             直接理论知识吧”:

                    singleinstance操作模式会新开启一个任务栈,跟其他普通activity不是 同一个任务栈,比较牛,他的模式流程是 首先要新开启一个新的任务栈把要激活的activity放置到新的 任务栈里,这个任务栈里面只有且 只有一个实例,也比较极端吧。说比较极端也跟他的应用场景有关系。

            应用场景 :

                 app各种词典,向有道词典,什么金山词典,说极端是因为不想被放置到同一个任务栈里面,它是全局的系统程序应用,达到节省内存的使用目的。 

         说这些到底有神马用呢,因为啊,大部分公司面试的时候 都好问这一口,问什么鸟问题呢,大致是要问你,android的启动模式跟进程 有没有关系,你说有什么关系嘞,鸟毛的关系都木有,进程是进程, 任务栈是管理activity的,你说有关系嘛,当然了没关系就是有关系咯,有关系就是没关系咯,但是同时呢,这些启动模式也相当的重要哇,这篇文章只是适用于新盆友使用咯,当然老朋友也可以看看啊,提提意见啥的,大家一起进步,但愿能帮助一些猿古人类吧,哈哈!

继续阅读