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

Android理解四种启动模式

2016-02-26 15:01 711 查看
前言

涉及到Android启动模式的知识,首先要提一下 任务栈。它是一种后进先出的线性存储数据结构。它仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

1.standar  :俗称标准启动模式,也是Android系统默认情况下的启动模式。这种模式完全按照启动了多少个Activity,就往栈内压栈多少个Activity对象。出栈时则倒叙一次出栈。举个例子, 有ActivityA 、 ActivityB 、ActivityC   :   假设开启ActivityA、接着开启ActivityB、然后是ActivityC。它们会依次往进入任务栈的栈顶, 那么现在栈里从栈底到栈顶 的顺序依次是ActivityA、ActivityB、ActivityC。然后在出栈的时候,假设按照一次Back键, ActivityC出栈,再按一次Back键,则ActivityB出栈,最后栈里只剩下ActivityA,再按一次Back则完全出栈,应用退出。

2.singleTop:俗称顶部只有一个启动模式。这种模式在standar模式下加入限制。 限制:当有新的Activity对象压栈时,会先检测一下栈顶是否已存在该Activity的实例,如果有这不会创建一个新的Activity对象加入, 如果没有才会创建。

应用:假设一个界面为了避免短时间内被开启很多次,则可以使用singleTop。

3.singleTask:单一任务栈模式:在任务栈里只可以存在一个同一Activity实例。另外还有一个,假设ActivityA要压栈了, 但是检测到栈里已经存在ActivityA的实例了,此时,该栈会清楚从ActivityA实例到栈顶所有的Activity实例清楚掉,最终,在栈顶只留下一个ActivityA对象。

应用:当Activity实例占用内存开销比较大,那么久该考虑下该Activity的启动模式设置为singleTask了。例如含有wenview的activity内存开销就比较大。

4.singleInstance:单一栈实例模式。

有必要和前面三种启动模式区别下:前面三种启动模式的所有压栈出栈行为都发生在同一个任务栈中。在singleInstance启动模式下,Activity单独开辟了单独任务栈来操作它的实例。

应用:跟3的应用场景没什么两样,都是保持单独实例。 只不过它们的工作模式有区分。 singleinstance常用场景:系统接听电话界面的启动。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android 启动模式