项目里面碰到一个很奇怪的问题,用户第一次从安装链接下载APP,打开APP的时候,然后把APP放到后台,然后再从桌面进入APP,APP一直卡在开屏页面,然后返回又到了之前的页面里面了。但是又存在一个问题,通过adb命令安装的时候,就不会出现这个问题。那这个原因是出在哪里呢?今天空闲我就研究一下
先思考一个问题,为什么adb命令安装和直接下载安装会有这种区别?
adb命令:adb命令相当于把apk包放到了安卓目录下的data/app目录里面
直接安装:通过安卓的installer程序进行安装app
那同样都是安装apk,为什么会出现这种问题呢?
桌面launcher的打开与Installer打开的不同
而installer的打开在com.android.packageinstaller.installappprogress
两者的不同在于installappprogress多了一个intent.setPackage(packageName)。
那为什么多了一个intent.setPackage(packageName)会再此打开时导致多了Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT
FLAG_ACTIVITY_BROUGHT_TO_FRONT是如何产生的:
关键在于 curTop.task != lastStack.topTask()
这个地方我估摸着是因为packageName会影响到task,他会额外增加一个flag,这样子会给页面属性增加这个flag,这也导致了为什么会在点开图标重复弹出开屏页面。
那怎么解决呢?
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT)> 0) {
/**为了防止重复启动多个闪屏页面**/
finish();
return;
}
就是判断当前页面是处于栈顶位置,是的话就finish掉activity,而且并且是要放在onCreate前面,在绘制view之前就finish掉