了解下singleTask吧, 如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。
解决方案 »
- WebView修改字体
- 【求助】静态库链接失败问题,在线等,多谢啊
- 按官网方法下载下来的android源码包怎么添加Ethernet?
- HTC应用商店,让工具“活”起来
- 按返回键和主页键当前Activity会接收什么消息?
- 移植bionic到powerpc架构
- PreferenceScreen intent 实现跳
- 如何在一个矩形中显示一串字符,并靠中显示?
- 新ADT环境下,初始化控件问题
- 点击网址可以跳转到淘宝客户端浏览,这个是怎么做的呢?
- 有用过友推分享组件的嘛?遇到了技术问题
- Horizontalscrollview里添加一个布局,该布局里在添加一个自定义的View,为什么View里用Canvas画图无法显示?
但是我并去触发A这个Activity的操作啊,我并没有从B跳转到A,我感觉理论应该执行Activity B的onRestart onStart onResume才对啊。
但是如果这样的话则不会调用onDestory现在有三个Activity A B C在配置文件中把B的启动模式设置为SingTaskA为默认进入的Activity A--B--C 当在C界面中按下home然后再点击应用程序 这时候不会销毁C 生命周期正常进入 onRestart onStart onResume 这就很奇怪了。
启动模式有四种,singleTask是其中的一种。
该模式只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。
如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。例如:
若我的应用程序中有三个Activity,C1,C2,C3,三个Activity可互相启动,其中C2为singleTask模式,那么,无论我在这个程序中如何点击启动,如:C1->C2->C3->C2->C3->C1-C2,C1,C3可能存在多个实例,但是C2只会存在一个,并且这三个Activity都在同一个task里面。
但是C1->C2->C3->C2->C3->C1-C2,这样的操作过程实际应该是如下这样的,因为singleTask会把task中在其之上的其它Activity destory掉。
操作:C1->C2 C1->C2->C3 C1->C2->C3->C2 C1->C2->C3->C2->C3->C1 C1->C2->C3->C2->C3->C1-C2
实际:C1->C2 C1->C2->C3 C1->C2 C1->C2->C3->C1 C1->C2若是别的应用程序打开C2,则会新启一个task。
如别的应用Other中有一个activity,taskId为200,从它打开C2,则C2的taskIdI不会为200,例如C2的taskId为201,那么再从C2打开C1、C3,则C2、C3的taskId仍为201。
注意:如果此时你点击home,然后再打开Other,发现这时显示的肯定会是Other应用中的内容,而不会是我们应用中的C1 C2 C3中的其中一个。
老大这点我懂了 但是我现在有一个Activity A和一个Activity B 我现在在manifest中配置A的android:launchMode为singleTask现在在A中加个按钮 跳转到B 然后按home键 按下home后Activity B会进入 onpause onstop 然后再点击程序图标 竟然会销毁B进入A 这是为什么吗?我并没有去从B跳转到A。 为什么B会销毁掉呢? 唯独这个疑问不懂
老大这点我懂了 但是我现在有一个Activity A和一个Activity B 我现在在manifest中配置A的android:launchMode为singleTask现在在A中加个按钮 跳转到B 然后按home键 按下home后Activity B会进入 onpause onstop 然后再点击程序图标 竟然会销毁B进入A 这是为什么吗?我并没有去从B跳转到A。 为什么B会销毁掉呢? 唯独这个疑问不懂
可能B并没有销毁。只是因为A的启动模式为singleTask,其实例只有一个。并且按下home后,B是stop掉了,但是别忘了task中,最上面的实例是A。
还是那个解释:若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。
再者,按home键,在task中,这两个Activity的实例都存在,B并没有销毁,除非调用ondestory