Android singleTask 和singleInstance的区别

上周三去了网易面试被问到了这个问题,当时没有回答正确,回来以后特地写了一个程序研究一下。

关于Android activity的启动模式一共有四种 standard singleTop singleTask singleInstance 这四种

standard 和singleTop都比较好理解,这里主要研究一下 singleTask singleInstance的区别

首先是:singleTask

 假设有两个Activity 分别是A 和 B ,Activity A的启动模式是standard Activity B的启动模式是singleTask, A中可以启动B,同时B中也可以启动A

通过A 启动B ,可以发现 A B的taskId是相同的,说明A和B运行在同一个栈里面,然后通过B启动A 此时的A也是在这个栈里,现在这个栈里从栈底到栈顶的顺序依次是 A—B—A,之后通过A再次启动B这个时候B的lanchMode就起作用了。通过测试发现 栈里不会产生新的B的实例,以前的时候起总以为栈里是这样的 A—A—B (ps:当时 面试的时候我就是这样回答的)实际运行结果是 A—B 中间的A直接被销毁了。

接着是:singleInstance

假设有两个Activity 分别是A 和 B ,Activity A的启动模式是standard Activity B的启动模式是singleInstance, A中可以启动B,同时B中也可以启动A

通过A启动B,可以发现A B的taskId是不相同的,说明A启动B的时候产生了一个新的栈,B运行在一个新的栈里面,时候通过B再次启动A  现在两个栈里面的情况分别是 这样的,原来的栈:A—A 新的栈:B 

然后通过A再次启动B可以发现在新的栈里并没有产生新的B的实例  新的栈依旧是:B 只不过B被显示到了最前面;

 

总结:singleTask 和singleInstance的区别是:singleTask不会产生新的栈, singleInstance第一次调用的时候则会产生新的栈, singleTask模式下 如果原来的栈里已经存在要调用的Activity的实例,下次调用的时候会销毁中间所有的Activity。

 

posted @ 2015-03-16 11:14  jiashu.ge  阅读(5471)  评论(0编辑  收藏  举报