网页设计网站大全,网页给别人做的 网站后续收费吗,长春关键词优化平台,重庆网站建设公司模板launchMode在多个Activity跳转的过程中扮演着重要的角色#xff0c;它可以决定是否生成新的Activity实例#xff0c;是否重用已存在的Activity实例#xff0c;是否和其他Activity实例公用一个task里。这里简单介绍一下task的概念#xff0c;task是一个具有栈结构的对象它可以决定是否生成新的Activity实例是否重用已存在的Activity实例是否和其他Activity实例公用一个task里。这里简单介绍一下task的概念task是一个具有栈结构的对象一个task可以管理多个Activity启动一个应用也就创建一个与之对应的task。 Activity一共有以下四种launchMode 1.standard 2.singleTop 3.singleTask 4.singleInstance 我们可以在AndroidManifest.xml配置activity的Android:launchMode属性为以上四种之一即可。 [html] view plaincopy print? pre namecode classhtml stylefont-size: 14px;activity android:name.A1 android:launchModestandard / standard默认模式可以不用写配置。在这个模式下都会默认创建一个新的实例。因此在这种模式下可以有多个相同的实例也允许多个相同Activity叠加。例如若我有一个Activity名为A1, 上面有一个按钮可跳转到A1。那么如果我点击按钮便会新启一个Activity A1叠在刚才的A1之上再点击又会再新启一个在它之上……点back键会依照栈顺序依次退出。singleTop 可以有多个实例但是不允许多个相同Activity叠加。即如果Activity在栈顶的时候启动相同的Activity不会创建新的实例而会调用其onNewIntent方法。 例如若我有两个Activity名为B1,B2,两个Activity内容功能完全相同都有两个按钮可以跳到B1或者B2唯一不同的是B1为standardB2为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中启动这个ActivitysingleTask允许别的Activity与其在一个task中共存也就是说如果我在这个singleTask的实例中再打开新的Activity这个新的Activity还是会在singleTask的实例的task中。例如若我的应用程序中有三个Activity,C1,C2,C3三个Activity可互相启动其中C2为singleTask模式那么无论我在这个程序中如何点击启动如C1-C2-C3-C2-C3-C1-C2C1,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中有一个activitytaskId为200从它打开C2则C2的taskIdI不会为200例如C2的taskId为201那么再从C2打开C1、C3则C2、C3的taskId仍为201。注意如果此时你点击home然后再打开Other发现这时显示的肯定会是Other应用中的内容而不会是我们应用中的C1 C2 C3中的其中一个。 应用场景 浏览器底层使用的是webkit c 内核,初始化一次需要申请很多的内存资源,占用cpu时间所以使用singletask,保证在任务栈里只会有一个实例存在 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打开D2D2会新建一个task运行假设它的taskId为201那么如果这时再从D2启动D1或者D3则又会再创建一个task因此若操作步骤为other-D2-D1这过程就涉及到了3个task了。 特点 singleInstance的启动模式更加极端, 开启新的activity,会给自己创建一个单独的任务栈 不管是从应用内部打开还是通过其他应用调用 TaskId是单独的已存在的则只需调用onNewIntent 应用场景 在整个手机操作系统里面只会有一个该activity的实例存在, 有道词典金山词典 所以多个应用程序共享这个activity的实例,有线程安全问题! 例如闹铃提醒将闹铃提醒与闹铃设置分离 转载http://blog.csdn.net/chaoyu168/article/details/51004716