欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2024-02-27 20:08:57
本文实例讲述了android编程中activity的四种启动模式。分享给大家供大家参考,具体如下: activity启动方式有四种,分别是: standard sin...

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