您的位置:首页 > 移动开发 > Android开发

android 基础(一):activity启动方式standard、singleTop、singleTaste、singleInstance

2016-01-18 10:18 211 查看

好记性不如烂笔头嘛!

android activity的启动方式一共有四种,设置方式为在AndroidManifest.xml文件中通过给<activity>标签指定android:launchMode属性来设置启动模式。

启动方式:

standard:默认启动方式,一般没有设定启动方式就是这种了。

                            android中对于activity有一个返回栈来进行管理,这种默认的启动方式是将每一个新启动的activity(不管栈中是否已有该activity存在)加入到栈                      顶,每次启动都会返回该activity的一个新的实例。

singleTop:这种启动方式会在activity启动时去返回栈中看一看,如果栈顶恰好是你正要启动的activity,那就巧了,这时就会直接返回将栈顶存在的activity实例咯。

singleTask:(1)这种启动方式在activity启动时也会去返回栈中去瞧一瞧,如果在栈里面发现要启动的activity已经存在了,就把栈里面压在该activity之上的所有activity都请出去,直接使用已存在的activity实例。如果栈里面没有找到要启动的activity,那就只有建一个新的放到栈里面咯。
              singleTask可以使用taskAffinity属性为当前activity指定所属的栈。如果不设置该属性,一个应用中的所有activity都是默认在一个返回栈中进行管理的,该属性的设置会在activity启动时去检索是否有taskAffinity所指栈名的栈存在,存在则再去该栈中查找要启动的activity是否存在,执行上面(1)所述操作;不存在则会新起一个名为taskAffinity指定的新栈来放该activity。
              将不同应用中的activity的taskAffinity设为一致可以使不同应用中的activity分配到同一个栈中,此种应用场景可以理解为:例如在某一应用app1中activity1需要发邮 件,于是调用了某个发邮件的应用app2中的activity2,app1、app2在AndroidManifest.xml中设置的启动方式都为singleTask并且设置了相同taskAffinity值为com.sendmail,那么activity1和activity2将会被分配到同一个名为com.sendmail的栈中,当邮件发送完成后,点击返回键,就会将      com.sendmail中的activity2出栈,此 时便会回到app1中的activity1界面上而不是直接退回到系统桌面了。
           此种启动启动方式有一种比较好记的理解方式:singleTask—single in task 在同一个栈中只存在一个当前activity实例,若栈中已存在则将其上activity出栈得到该activity实例,不存在则新建一个入栈。还可以为当前activity指定所要入的栈为哪一个栈

singleInstance:以singleInstance模式启动的Activity具有独占性,即它会独自占用一个栈,被他开启的任何activity都会运行在其他栈中,但并不意味着每启动一个activity都会新建一个栈来,而是可为其指定一个新的栈,这个新的栈可以使新建的也可以是已存在的栈。

                        和singleTask一样,可以通过taskAffinity来为activity指定一个要去到的栈,如果存在这样的一个栈,则检查在这个任务中是否已经有了一个activity的实例, 如果已经存在一个activity的实例,则会重用这个栈和栈中的activity实例,将这个任务调到前台,清除位于activity上面的所有Activity,显示activity。 如果不存在一个activity的实例,会在这个任务中创建activity的实例。如果不存在这样的一个任务,会创建一个新的栈,并且将activity启动到这个新的栈中。

                        此种启动方式可以实现当多个不同的应用程序app1 activity1、app2

activity2、app3
activity3都要使用app4中的一个activity4,那么当分别在app1、app2、app3调用activity4时将activity4的启动模式设置为singleInstance 设置askAffinity为一个新的栈com.share,那么activity1、activity2、activity3、activity4都会在com.share中共享activity4实例。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android