Activity的四种加载模式(7)
来源:未知 责任编辑:责任编辑 发表时间:2014-02-18 03:21 点击:次
之后,我们按Home键,返回桌面,然后,再次进入该应用,我们神奇的发现,我们进入的是MyActivity界面,taskId为10的所有Activity不知了踪影!
这是因为,该应用对应的task的id为9,所以,进入后之后MyActivity在该task中,所以最后显示的是MyActivity。我的以上Activity1的代码实际上是不好的习惯,因为Activity1很可能会成为一个孤岛,所以建议,如果该Activity的类型不是LAUNCHER,最好不要设为singleTask。
那么singleTask的这些特性有什么用处?我们举一个例子,浏览器就是一个singleTask的例子,启动一个浏览器,在Android中是一个比较沉重的过程,它需要做很多初始化的工作,并且会有不小的内存开销。如果有多个应用都来请求打开网页,那么系统就不会不堪重负。因此,如果浏览器采用singleTask模式,如果有多个请求打开网页的请求,都会在一个Task中响应,这样就会避免以上的情况。
“孤独寂寞”——singleInstance模式
我们现在来研究最后一个加载模式,singgleInstance,测试很简单,我们只要在singleTask测试的例子中,将Activity1的模式改为singleInstance模式即可。
我们首先进行同一应用内部的测试。
首先Activity2->Activity1,观察log信息:
03-01 15:41:59.283: ERROR/Activity2(488): Activity2 onCreated! HashCode=1156067168 TaskId=12
03-01 15:42:04.103: ERROR/Activity1(488): Activity1 onCreate! HashCode=1156107520 TaskId=13
我们发现,当采用singleInstance模式时,启动时创建了一个新的Task,并将Activity1实例化加入到该Task中。
然后我们Activity1->Activity2->Activity1,观察log信息:
03-01 15:43:52.214: ERROR/Activity2(488): Activity2 onCreated! HashCode=1156127728 TaskId=12
03-01 15:43:56.804: ERROR/Activity1(488): Activity1 onNewIntent! HashCode=1156107520 TaskId=13
我们通过该log信息可以得出结论:singleInstance的Activity(Activity1)不允许其他的Activity(Activity2)加入到自己的Task中,它是的内心容不下另一个人,它是一个孤独寂寞的人。 当Activity1发现已经存在一个Task中包含自己的实例时,它会调用自己的onNewIntent。
然后,我们同样也测试一下,如果其它应用程序调用Activity1会出现什么样的情况:
MyActivity->Activity1, 观察log信息:
03-01 15:50:21.134: ERROR/MyActivity(556): TaskId=16
03-01 15:50:21.484: ERROR/Activity1(534): Activity1 onCreate! HashCode=1156107344 TaskId=17
不出意料,Activity1重新创建了一个Task,并将自己的实例入栈。
Activity1->Activity2->Activity1->Activity2, 我们观察log信息:
03-01 15:50:36.484: ERROR/Activity2(534): Activity2 onCreated! HashCode=1156128056 TaskId=18
03-01 15:50:46.114: ERROR/Activity1(534): Activity1 onNewIntent! HashCode=1156107344 TaskId=17
我们从该过程可以看出:如果从其它应用程序调用singleInstance模式的Activity(Activity1),从该Activity开启其他Activity(Activity2)时,会创建一个新的Task(task id为18的那个),实际上,如果包含该Activity(Activity2)的Task已经运行的话,他会在该运行的Task中重新创建。
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>