码迷,mamicode.com
首页 > 移动开发 > 详细

Android不同方式启动导致重复启动相同的Activity的问题解决办法

时间:2014-10-30 15:16:09      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   io   color   ar   使用   java   for   

打开程序入口有好多种方法:

1、shell命令打开运行

2、Launcher待机界面运行

3、状态栏启动运行

4、桌面快捷方式运行

5、软件中调用运行

6、安装软件后执行“open/打开”运行


如果用户安装后立即执行“open/打开” 运行或者用adb shell命令运行应用程序,然后点HOME键把程序挂起,

然后再采用其他发送启动程序,这样则会再启动一个Main程序,

导致用户要点击多下才能退出程序,


那么原因是什么呢?

这是因为Intent的处理机制是,先比较Activity,再比较Action、Flag、bnds。。。,前后两张方式的Action不一样,

一个有LAUNCHER ACTION,一个没有,所以会认为是启动两个不同的INTENT。


那么问题来了,解决bug技术哪家强呢?

哈哈,很简单:可以尝试在AndroidManifest.xml文件中的启动activity一项中加入参数:

android:launchMode="singleInstance"  

问题又来了为什么这行代码那么神奇呢,我们看看这行代码的原理:

当一个Acitivty被设置成singleInstance模式后,该Acitivity就会有一个独享的任务栈,当它一旦被创建就不会再重新创建。

这下全明白了吧,


当然也会有一点点后遗症,如果你在使用startActivityForResult的时候:

解释什么是startActivityForResult:A-Activity需要在B-Activtiy中执行一些数据操作,而B-Activity又要将,执行操作数据的结果返回给A-Activtiy

这个时候如果你吧A-Activity设置成singleInstance模式的话就收不到B-Activity返回的数据了,原因呢:

很简单,因为A-Activity不能被重新创建,不会执行回调,当然就不好用了,嘿嘿,解答完毕。



 

Android不同方式启动导致重复启动相同的Activity的问题解决办法

标签:android   style   blog   io   color   ar   使用   java   for   

原文地址:http://blog.csdn.net/icekings/article/details/40619705

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!