項目里面碰到一個很奇怪的問題,用戶第一次從安裝鏈接下載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掉