安卓SDK33 點擊桌面圖標重復創建開屏頁面

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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容