您的位置:首页 > 移动开发 > Android开发

Android中的Activity启动的方式分析

2016-01-17 14:16 441 查看
前些日子做一个项目就涉及到了一个典型的activity启动模式的应用,今天来总结一下。

都知道Activity启动的方式有4种:

standard : 标准模式(默认模式)

singleTop :栈顶模式

singleTask : 单一任务模式

singleInstance :单例模式

要理解这几种模式,先建议理解下Android里的Activity 栈,里面是如何管理的。这里用一个小例子简单的描述帮助理解了。

手枪的弹匣都见过吧(电视里各种有),把它理解成栈就行,里面的子弹就是我们说的Activity 。我们打开一个Activity时 ,就会把这个Activity入栈,所以当前显示的

都是栈顶的内容,当跳转到另一个Activity时,新的Activity就会入栈,就像压入一颗新子弹。当点击了back返回的时候,就会把最顶端的Activity出栈,类似开了一枪

其他的类似了,就不多说。现在来分析下这4个的区别:

定义3个Activity 和对应的layout 进行跳转。

standard :标准模式,不多说,系统默认的。如果在1里面添加一个按钮,Intent 到自己呢?Intent it = new Intent(this,MainActivity.class) ;跳转2次后你会发现需要按3次

才会退出,所以标准模式是不管栈里面是否有该对象了 都会创建出来 并入栈。所以需要3次才退出,合理吗?

singleTop :栈顶模式。标准模式看到了,会重复的创建。想象下自己的程序那样会被如何?那我们希望返回时栈顶如果已经有了,是不是就直接使用不是更好么?所以

该模式就正是我们需要的。还是刚刚的那个例子,改了后,打印入栈出栈Activity的ID 就能对比出来了。

singleTask : 单一任务模式 。 把标准模式的例子稍作修改,1 -> 2 -> 3 -> 1. 此时3跳到1后 结果是什么?会发现会创建一个新的1 。原因很简单,因为3跳转的时候3是栈顶

并不是1,所以此时还是会创建出一个新的1,所以当我们back的时候,会需要点击4次(2次看到1)才能退出,额好像有点不妥,为什么自己去想吧!所以我们只需要一个

Activity就可以了,singleTask的意思是在启动的时候会检查栈里面是否已经存在该Activity了,比如1,如果有就会直接回到1,那如果1在最下面怎么办?一样的把它上面的

Activity都弹出,直到1为止。

singleInstance :单例模式。相比前面的就要复杂点咯。留着吧……待续!

如何设置?在清单文件中设置既可以了:

<activity name = "" android:launchMode="standard" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: