android launchmode(四种启动模式)应用场景及实例
2017-10-17 15:19
477 查看
我们在开发项目的过程中,会涉及到该应用中多个Activity组件之间的跳转,或者夹带其它应用的可复用的Activity。例如我们可能希望跳转到原来某个Activity实例,而不是产生大量重复的 Activity。这样就需要我们为 Activity 配置特定的加载模式,而不是使用默认的加载模式。
模式介绍
[1] standard 模式
[2] singleTop 模式
[3] singleTask 模式
[4] singleInstance 模式
设置启动模式的位置在 AndroidManifest.xml 文件中 Activity 元素的 android:launchMode 属性。
应用场景
http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode
http://stackoverflow.com/questions/2626218/examples-for-android-launch-modes
singleTop适合接收通知启动的内容显示页面。例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。
从外界可能多次跳转到一个界面
singleTask适合作为程序入口点。例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。
之前打开过的页面,打开之前的页面就ok,不再新建
singleInstance适合需要与程序分离开的页面。例如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。
某个应用中用到了google地图,当退出该应用的时候,进入google地图,还是刚才的界面
launchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生
4000
成新的Activity实例,是否重用已存在的Activity实例,是否和其他Activity实例公用一个task里。这里简单介绍一下task的概念,task是一个具有栈结构的对象,一个task可以管理多个Activity,启动一个应用,也就创建一个与之对应的task。
Activity一共有以下四种launchMode:
1.standard
2.singleTop
3.singleTask
4.singleInstance
我们可以在AndroidManifest.xml配置的android:launchMode属性为以上四种之一即可。
下面我们结合实例一一介绍这四种lanchMode:
1、standard模式是默认的启动模式,不用为配置android:launchMode属性即可,当然也可以指定值为standard。
简单点理解:standard启动模式Activity栈从栈底到栈顶顺序为A1 -> B -> C -> A2…。(其中A、B、C等都表示不同的Activity实例,A1、A2则表示属于具有同一Activity类的不同实例)
2.singleTop
我们在上面的基础上为指定属性android:launchMode=”singleTop”,系统就会按照singleTop启动模式处理跳转行为。我们重复上面几个动作,将会出现下面的现象:
3、 这就是singleTop启动模式,如果发现有对应的Activity实例正位于栈顶,则重复利用,不再生成新的实例。
简单点理解,singleTop即表示当前Activity栈中“栈顶唯一”,Activity跳转顺序或standard模式下栈结构如果为:A -> B -> C -> D1 -> D2,则singleTop启动模式为:A -> B -> C -> D1(此时回调D1的onNewIntent()..)。
4.singleInstance
这种启动模式比较特殊,因为它会启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入。
简单点理解,singleInstance所标识的Activity,当被启动时,系统会首先判断系统其他栈中是否已经存在此Activity实例,有则直接使用,并且其所在的Activity栈理论上只有它一个Activity元素。所以启动它的Activity与它并不在一个task中,所以才需要特别注意Back的问题。一般表示为:task1 A -> task2 B。
singleInstance表示该Activity在系统范围内“实例唯一”。由此我们发现,singInstance和singleTask主要区别在与系统范围内的“实例唯一”还是当前Activity栈“实例唯一”。
模式介绍
[1] standard 模式
这是默认模式,每次激活Activity时都会创建Activity实例,并放入任务栈中。
[2] singleTop 模式
如果在任务的栈顶正好存在该Activity的实例,就重用该实例( 会调用实例的 onNewIntent() ),否则就会创建新的实例并放入栈顶,即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建新的实例。
[3] singleTask 模式
如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的 onNewIntent() )。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移出栈。如果栈中不存在该实例,将会创建新的实例放入栈中。
[4] singleInstance 模式
在一个新栈中创建该Activity的实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例( 会调用实例的 onNewIntent() )。其效果相当于多个应用共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。
设置启动模式的位置在 AndroidManifest.xml 文件中 Activity 元素的 android:launchMode 属性。
应用场景
http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode
http://stackoverflow.com/questions/2626218/examples-for-android-launch-modes
singleTop适合接收通知启动的内容显示页面。例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。
从外界可能多次跳转到一个界面
singleTask适合作为程序入口点。例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。
之前打开过的页面,打开之前的页面就ok,不再新建
singleInstance适合需要与程序分离开的页面。例如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。
某个应用中用到了google地图,当退出该应用的时候,进入google地图,还是刚才的界面
launchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生
4000
成新的Activity实例,是否重用已存在的Activity实例,是否和其他Activity实例公用一个task里。这里简单介绍一下task的概念,task是一个具有栈结构的对象,一个task可以管理多个Activity,启动一个应用,也就创建一个与之对应的task。
Activity一共有以下四种launchMode:
1.standard
2.singleTop
3.singleTask
4.singleInstance
我们可以在AndroidManifest.xml配置的android:launchMode属性为以上四种之一即可。
下面我们结合实例一一介绍这四种lanchMode:
1、standard模式是默认的启动模式,不用为配置android:launchMode属性即可,当然也可以指定值为standard。
简单点理解:standard启动模式Activity栈从栈底到栈顶顺序为A1 -> B -> C -> A2…。(其中A、B、C等都表示不同的Activity实例,A1、A2则表示属于具有同一Activity类的不同实例)
2.singleTop
我们在上面的基础上为指定属性android:launchMode=”singleTop”,系统就会按照singleTop启动模式处理跳转行为。我们重复上面几个动作,将会出现下面的现象:
3、 这就是singleTop启动模式,如果发现有对应的Activity实例正位于栈顶,则重复利用,不再生成新的实例。
简单点理解,singleTop即表示当前Activity栈中“栈顶唯一”,Activity跳转顺序或standard模式下栈结构如果为:A -> B -> C -> D1 -> D2,则singleTop启动模式为:A -> B -> C -> D1(此时回调D1的onNewIntent()..)。
4.singleInstance
这种启动模式比较特殊,因为它会启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入。
简单点理解,singleInstance所标识的Activity,当被启动时,系统会首先判断系统其他栈中是否已经存在此Activity实例,有则直接使用,并且其所在的Activity栈理论上只有它一个Activity元素。所以启动它的Activity与它并不在一个task中,所以才需要特别注意Back的问题。一般表示为:task1 A -> task2 B。
singleInstance表示该Activity在系统范围内“实例唯一”。由此我们发现,singInstance和singleTask主要区别在与系统范围内的“实例唯一”还是当前Activity栈“实例唯一”。
相关文章推荐
- android launchmode(四种启动模式)应用场景及实例
- android launchmode(四种启动模式)应用场景及实例
- android launchmode(四种启动模式)应用场景及实例
- android launchmode(四种启动模式)应用场景及实例
- 【Android】android launchmode(四种启动模式)应用场景及实例
- android launchmode(四种启动模式)应用场景及实例
- android launchmode(四种启动模式)应用场景及实例
- android launchmode(四种启动模式)应用场景及实例
- Android:图解四种启动模式 及 实际应用场景解说
- 浅谈Android四种启动模式及应用场景--standrad、singleTop、singleTask、singleInstance
- [Android开发]Activity的四种启动模式及其应用场景
- Android:图解四种启动模式 及 实际应用场景讲解
- Android:图解四种启动模式 及 实际应用场景解说
- Android之A面试题①Activity的四种启动模式及其应用场景
- Android:图解四种启动模式 及 实际应用场景解说
- Android 的四种启动模式及使用场景详解
- Android中的Activity四种启动模式(launchMode)
- Android中的Activity四种启动模式(launchMode)
- [android]区分Activity的四种启动模式---LaunchMode
- android:launchMode的四种加载模式,Activity的四种启动模式