标签:
上周三去了网易面试被问到了这个问题,当时没有回答正确,回来以后特地写了一个程序研究一下。
关于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。
Android singleTask 和singleInstance的区别
标签:
原文地址:http://www.cnblogs.com/gejs/p/4341336.html