安卓SDK33 点击桌面图标重复创建开屏页面

2023-05-05  本文已影响0人  阿里高级软件架构师

项目里面碰到一个很奇怪的问题,用户第一次从安装链接下载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掉

上一篇 下一篇

猜你喜欢

热点阅读