Android编程中Activity的四种启动模式
本文实例讲述了android编程中activity的四种启动模式。分享给大家供大家参考,具体如下:
activity启动方式有四种,分别是:
standard
singletop
singletask
singleinstance
可以根据实际的需求为activity设置对应的启动模式,从而可以避免创建大量重复的activity等问题。
设置activity的启动模式,只需要在androidmanifest.xml里对应的<activity>标签设置android:launchmode属性,例如:
<activity android:name=".a1" android:launchmode="standard" />
下面是这四种模式的作用:
standard
默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同activity叠加。
例如:
若我有一个activity名为a1, 上面有一个按钮可跳转到a1。那么如果我点击按钮,便会新启一个activity a1叠在刚才的a1之上,再点击,又会再新启一个在它之上……
点back键会依照栈顺序依次退出。
singletop
可以有多个实例,但是不允许多个相同activity叠加。即,如果activity在栈顶的时候,启动相同的activity,不会创建新的实例,而会调用其onnewintent方法。
例如:
若我有两个activity名为b1,b2,两个activity内容功能完全相同,都有两个按钮可以跳到b1或者b2,唯一不同的是b1为standard,b2为singletop。
若我意图打开的顺序为b1->b2->b2,则实际打开的顺序为b1->b2(后一次意图打开b2,实际只调用了前一个的onnewintent方法)
若我意图打开的顺序为b1->b2->b1->b2,则实际打开的顺序与意图的一致,为b1->b2->b1->b2。
singletask
只有一个实例。在同一个应用程序中启动他的时候,若activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它activity destory掉并调用它的onnewintent方法。
如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个activity,singletask允许别的activity与其在一个task*存,也就是说,如果我在这个singletask的实例中再打开新的activity,这个新的activity还是会在singletask的实例的task中。
例如:
若我的应用程序中有三个activity,c1,c2,c3,三个activity可互相启动,其中c2为singletask模式,那么,无论我在这个程序中如何点击启动,如:c1->c2->c3->c2->c3->c1-c2,c1,c3可能存在多个实例,但是c2只会存在一个,并且这三个activity都在同一个task里面。
但是c1->c2->c3->c2->c3->c1-c2,这样的操作过程实际应该是如下这样的,因为singletask会把task中在其之上的其它activity destory掉。
操作:c1->c2 c1->c2->c3 c1->c2->c3->c2 c1->c2->c3->c2->c3->c1 c1->c2->c3->c2->c3->c1-c2
实际:c1->c2 c1->c2->c3 c1->c2 c1->c2->c3->c1 c1->c2
若是别的应用程序打开c2,则会新启一个task。
如别的应用other中有一个activity,taskid为200,从它打开c2,则c2的taskidi不会为200,例如c2的taskid为201,那么再从c2打开c1、c3,则c2、c3的taskid仍为201。
注意:如果此时你点击home,然后再打开other,发现这时显示的肯定会是other应用中的内容,而不会是我们应用中的c1 c2 c3中的其中一个。
singleinstance
只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的activity存在。
例如:
程序有三个activityd1,d2,d3,三个activity可互相启动,其中d2为singleinstance模式。那么程序从d1开始运行,假设d1的taskid为200,那么从d1启动d2时,d2会新启动一个task,即d2与d1不在一个task中运行。假设d2的taskid为201,再从d2启动d3时,d3的taskid为200,也就是说它被压到了d1启动的任务栈中。
若是在别的应用程序打开d2,假设other的taskid为200,打开d2,d2会新建一个task运行,假设它的taskid为201,那么如果这时再从d2启动d1或者d3,则又会再创建一个task,因此,若操作步骤为other->d2->d1,这过程就涉及到了3个task了。
更多关于android相关内容感兴趣的读者可查看本站专题:《android编程之activity操作技巧总结》、《android通信方式总结》、《android调试技巧与常见问题解决方法汇总》、《android开发入门与进阶教程》、《android基本组件用法总结》、《android布局layout技巧总结》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。
推荐阅读
-
详解Android中Activity的四大启动模式实验简述
-
详解Android开发中Activity的四种launchMode
-
Android中activity的启动模式
-
Android 中启动自己另一个程序的activity如何实现
-
Android编程之四种Activity加载模式分析
-
Android中activity的启动模式
-
Android编程实现在一个程序中启动另一个程序的方法
-
Android编程之四种Activity加载模式分析
-
Android入门之Activity四种启动模式(standard、singleTop、singleTask、singleInstance)
-
Android编程中activity的完整生命周期实例详解