当前位置: 移动技术网 > 移动技术>移动开发>Android > Android编程中Activity的四种启动模式

Android编程中Activity的四种启动模式

2019年07月24日  | 移动技术网移动技术  | 我要评论

本文实例讲述了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程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网