Android 安装软件后执行“OPEN”引起的Intent血案(系统BUG)

来源:互联网 发布:k11防水涂料跟js 区别 编辑:程序博客网 时间:2024/05/16 07:16

 

编写:徐建祥(netpirate@gmail.com)

日期:2010/12/13

网址:http://www.anymobile.org

 

 

打开程序的入口有很多个:

 

shell 命令行运行;

Launcher待机界面执行;

状态通知栏运行;

桌面快捷方式运行;

软件中调用运行;

 

安装软件后执行“OPEN”运行!

 

前面几项,调用程序的代码如下(参考:com.android.Launcher/.Launcher.java):

 

 

 

而安装软件后,点击“Open”调用的代码如下(参考:com.android.packageinstaller/.InstallAppDone.java):

 

 

 

如果用户安装软件后立刻执行“Open”,运行程序后,按HOME键返回到后台,然后再通过别的几种方法运行程序,则会再起一个MAIN程序。这是因为Intent的处理机制是,先比较Activity,再比较Action、Flag、bnds。。。,前后两张方式的Action不一样,一个有LAUNCHER ACTION,一个没有,所以会认为是启动两个不同的INTENT。

 

目前只想到一个简单的处理方式:

 

程序入口MAIN程序:SplashActivity.java

程序原入口程序:LoginActivity.java

 

启动程序后,在状态通知栏上添加快捷通知,代码如下:

 

 

 

 

 

 

 

测试流程:

 

a、软件本地安装;

b、安装后执行“Open”;

c、运行软件会从SplashActivity添加NOTICIFICATION TestActivity;

d、跳转至SplashActivity(附带LAUNCHER ACTION);

e、再跳转至TestActivity;

f、点击BUTTON,跳转至Test2Activity;

g、下拉状态通知栏,点击程序通知,可以正常运行程序。

 

TODO: 安装软件后执行OPEN后,从待机界面运行程序,还是会启动两个一样的ACTIVITY,这个问题没有解决!:(

 

 

 

原创粉丝点击