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