AndroidMainfest 启动模式

来源:互联网 发布:大排畸数据怎么看 编辑:程序博客网 时间:2024/05/22 04:25

Android开发者在AndroidMainifest文件中一共设计了四种启动模式


 1)standard  

第一种是默认的启动模式,如果不指定Acticity的启动模式,则使用这种方式来启动Acytivity。这种启动模式每次都会创建新的实例,每次点击standard 模式创建Activity 后,都会创建新的MainActicity覆盖在远Activity上


2)singleTop 

如果指定启动Acticity为singleTop模式,那么在启动时,系统会判断当前栈顶Acticity是不是要启动的Acticity,如果是则不创建新的Acticity而直接引用这个Acticity,如果不是则创建新的Acticity,如果一次来10条消息,总不能一次弹10个Acticity,总不能10个Acticity,这种启动模式的任务栈如下图。

这种模式虽然不会创建新的实例,但是系统仍然会在Acticity启动时调用onNewIntent()方法。举个例子来说,如果当前任务栈有A,B,C三个Acticity,而是调用C的onNewIntent()方法,当前任务栈依然是A,B,C三个Acticity.


 3)singleTask 

singleTask模式与singleTop模式类似,只不过singleTop是检测栈顶元素是否需要启动的Acticity,而singleTask是检测整个Acticity栈中是否存在当前需要启动的Acticity。如果存在,则将该Acticity至于栈顶,并将Acticity以上的Acticity都销毁。不过这里是指同一个App中启动这个singleTask的Acticity,如果是其他程序以singleTask模式来启动这个Activity,那么他将创建一个新的任务栈。不过这里有一点需要注意的是,如果启动的这个任务栈将一起被切换到前台。

可以发现使用这种模式创建的Acticity不是在新的任务栈中被打开,就是将已打开的Activity切换到前台,所以这种启动模式通常可以用来退出整个应用。


 4)singleInstance

singleInstance这种启动模式和使用的浏览器工作原理类似。在多个程序中访问浏览器时,如果当前浏览器没有打开,则打开浏览器,否则会在当前打开的浏览器中访问。申明为singleInstance的Activity会出现在一个新的任务栈中,而且该任务栈中的只存在这一个Activity。举个例子来说,如果应用A的任务栈创建了MianActicity实例,且启动模式singlentance,如果应用B也要激活MainActicity,则不需要创建,两个应用共享该Activity实例。这种启动模式常用于需要与程序分离的界面,如在SrtupWizard中调用紧急呼叫,就是使用这种启动模式




0 0