Activity的四种启动模式
先列出这四种模式:
- standard 标准的启动模式
- singleTop 单一栈顶模式
- singleTask 单一任务栈模式
- singleInstance 单一实例模式
1. standard 标准的启动模式(默认)
每次启动这个activity的组件的时候, 都会去新创建 activity实例,然后放到任务栈中去.
从上图可以看出, Standard模式不管有没有该Activity,都会创建一个新的出来.
2. singleTop 单一栈顶模式
在启动某个具体的activity 的时候, 系统会去检查当前的任务栈中是否处于栈顶的当前的activity的实例,
如果是, 那么就不新创建. 如果处于栈顶不是当前的activity的实例,那么仍然会新创建实例
如短信应用
从上图可以看出, 在激活了Activity2后,不会再创建新的Activity2, 因为已经有一个Activity2在任务栈的顶部了.
如果在顶部的是Activity1,那么还是会继续创建Activity2的
3. singleTask 单一任务栈模式
在启动activity的时候, 如果发现当前的任务栈中已经有这个activity的实例了, 那么就不会新创建这个activity的实例了,
并且会将处于这个activity 之上的activity的实例给弹栈
如果一个activity的实例创建的过程中,占用的内存比较大, 消耗了挺多资源,
那么 这个activity的启动模式通常就会设置成 单一任务栈模式.
例如浏览器使用的是SingTask,浏览器中有js的解析器,CSS的解析器等等,设置成Singtask会节约内存
从上图可以看出, 在激活了Activity1后, 任务栈中只剩Activity1了,
因为只能有Activity1一个实例,并且会将处于上面的Activity2给弹栈
4. singleInstance 单一实例模式
如果某个activity的启动模式设置成单一实例模式, 那么整个手机系统中, 就只能有一个这个activity的实例了,
并且这个activity的实例会在一个单独的任务栈中.这种启动一般很少用.
除了系统级别的一些应用程序会用,其他的应用程序很少用.
如果某个activity 要显示的界面在整个手机中 只有一个 的话,那么 这个activity就会设置成singleInstance
从上图可以看出, 在应用1要激活Activity3的时候,发现手机系统里的应用2已经有Activity3了,
这时,应用1不会再去创建Activity3,而是共享应用2里的Activity3