activity四种启动模式

来源:互联网 发布:南京魔苹网络怎么样 编辑:程序博客网 时间:2024/06/04 19:22

  做开发做了也有两三年了,一直也没有写博客的习惯。最近有时候想我自己到底会些什么东西呢?还是总结一下吧,总结一下才能更明白的继续往前走。今天先总结下activity的四种启动模式吧。

  为什么要说activity的启动模式呢?这得先从task任务栈说起。task是一个栈结构的容器,可以放置多个Activity实例。通常默认情况下启动一个app会生成一个默认的task栈去存放activity的实例,但是有时候可能我们需要在另一个任务栈存放activity实例,或者需要activity只有一个实例,或者为了避免重复创建大量的activity等等一些需求,这就需要设置activity的启动模式以及设置Intent的flag.今天先总结下activity的四种启动方式。activity有四种启动方式,分别为:standard、singleTop、singleTask、singleInstance。设置方式为在AndroidManifest.xml中进行配置。标签熟悉为launchMode.

 <activity            android:name=".activity.MainActivity"            android:launchMode="singleTask"            android:windowSoftInputMode="adjustResize" />

Standard

默认为此启动模式,不配置时即默认为此启动模式。在此模式下,startactivity时系统会在默认task栈中创建一个新的实例,该实例与栈中是否已有实例无关。在这种模式下,同一个task任务栈中可以同时存在多个相同activity的实例,每个实例有自己的空间与id。

SingleTop

该模式逻辑为:若task栈顶已经是要启动的activity实例,则不重新创建activity实例,若task栈顶不是要启动的activity实例,则重新创建一个activity。在这种模式下,同一个任务栈中可以存在多个activity实例。

SingleTask

该模式逻辑为:在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若已存在,则会把task栈中在其实例之上的其它Activity destory掉并调用它的onNewIntent方法,此时如果点击back键,应用将会退出。

singleInstance

该模式逻辑为:该activity实例只存在一个单独的task栈,该单独的任务栈中只有其一个activity实例,该task栈 与启动该activity所在的task栈并不是同一个。

具体的大家可以通过代码去尝试一下,实践才是检验真理的唯一标准。代码中可以通过getTaskId()获取该activity所在任务栈Id用于对比。


0 0