Android基础之Activity四种启动模式

来源:互联网 发布:2016淘宝客微信教程 编辑:程序博客网 时间:2024/05/22 05:04

1 启动模式介绍

  启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的android:launchMode属性设置;

  启动模式有4种,分别为standard、singleTop、singleTask、singleInstance;

2 具体介绍每一个启动模式。

(1)standard
这里写图片描述

若我意图打开的顺序为B1->B2->B2,则实际打开的顺序为B1->B2->B2

(2)singleTop
这里写图片描述

若我意图打开的顺序为:B1->B2->B2,则实际打开的顺序为:B1->B2(后一次意图打开B2,实际只调用了前一个的onNewIntent方法)
若我意图打开的顺序为:B1->B2->B1->B2,则实际打开的顺序为:B1->B2->B1->B2。

(3)singleTask
singleTask:如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop(onDestroy())
这里写图片描述

若我的应用程序中有三个Activity,C1,C2,C3,三个Activity可互相启动,其中C2为singleTask模式,如下:
操作:(1)C1->C2 (2) C1->C2->C3 (3) C1->C2->C3->C2 (4)C1->C2->C3->C2->C3->C1 (5) C1->C2->C3->C2->C3->C1-C2
实际:(1)C1->C2 (2) C1->C2->C3 (3)C1->C2 (4) C1->C2->C3->C1 (5) C1->C2

(4)singleInstance
想象以下场景,假设我们的程序中有一个活动是允许其他程序调用的,如果我们想实现其他程序和我们的程序可以共享这个活动的实例,应该如何实现呢?

这里写图片描述

这里写图片描述
可看,SecondActivity的Task id不同于FirstActivity和ThirdActivity。这说明SecondActivity确实是存放在一个单独的返回栈里的,而且这个栈中只有SecondActivity这一个活动。

按下Back键进行返回,发现ThirdActivity竟然直接返回到了FirstActivity,再按下Back键又会返回到SecondActivity,再按下Back键才会退出程序,这是为什么呢?

由于FirstActivity和ThirdActivity是存放在同一个返回栈里的,当在ThirdActivity的界面按下Back键,ThirdActivity会从返回栈中出栈,那么FirstActivity就成为了栈顶活动显示在界面上,因此也就出现了从ThirdActivity直接返回到FirstActivity的情况。然后在FirstActivity界面再次按下Back键,这时当前的返回栈已经空了,于是就显示了另一个返回栈的栈顶活动,即SecondActivity。最后再次按下Back键,这时所有返回栈都已经空了,也就自然退出了程序。

这里写图片描述

3 使用场景

(1)standard
普通模式:若我有一个Activity名为A1, 上面有一个按钮可跳转到A1。那么如果我点击按钮,便会新启一个Activity A1叠在刚才的A1之上,再点击又会再新启一个在它之上……。点back键会依照栈顺序依次退出。

(2)singleTop
singleTop适合接收通知启动的内容显示页面(从外界可能多次跳转到一个界面)。例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次激活同一个新闻内容页面,返回时立刻返回前一个页面。

(3)singleTask
singleTask适合作为程序入口点。例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。即是:之前打开过的页面,打开之前的页面就ok,不再新建。

(4)singleInstance
singleInstance适合需要与程序分离开的页面。例如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。

另一个例子:某个应用中用到了百度地图,当退出该应用的时候,进入百度地图,百度地图还是显示刚才的界面。

0 0
原创粉丝点击