1. 程式人生 > >【Android】桌面進入應用重啟問題

【Android】桌面進入應用重啟問題

使用手機系統第一次安裝apk之後直接開啟,進入應用二級選單,將應用退到後臺,然後再次從桌面進入應用,出現應用重啟重新回到主選單的問題。

此問題應該算是一個廠商問題,從log來看,當從第一次開啟的應用進入到後臺之後,然後從桌面點選應用的資訊如下:

 

第一次安裝完之後開啟應用:

Line 33: 05-18 16:12:11.604 1511 1980 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.example.wg.webviewtest cmp=com.example.wg.webviewtest/.MainActivity} from uid 10076 and from pid 18195 on display 0

 

進入應用二級選單:
Line 107: 05-18 16:12:14.664 1511 2713 I ActivityManager: START u0 {cmp=com.example.wg.webviewtest/.NativeMainActivity} from uid 10201 and from pid 19256 on display 0

 

使用HOME鍵退出後臺:
Line 157: 05-18 16:12:15.817 1511 1742 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000

 cmp=com.oppo.launcher/.Launcher (has extras)} from uid 1000 and from pid 1511 on display 0

 

再次從桌面進入應用
Line 179: 05-18 16:12:17.108 1511 1593 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.wg.webviewtest/.MainActivity bnds=[540,966][792,1260]} from uid 10053 and from pid 2715 on display 0

應用收到的log資訊:

第一次開啟應用的intent

Line 23: 05-18 16:30:58.739 21998 21998 D MainActivity: =====General Intent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000pkg=com.example.wg.webviewtest cmp=com.example.wg.webviewtest/.MainActivity }

 

退出到後臺後,第二次從桌面開啟應用的intent
Line 181: 05-18 16:31:03.480 21998 21998 D MainActivity: =====General Intent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10600000cmp=com.example.wg.webviewtest/.MainActivity bnds=[540,966][792,1260] }

從網上參考的解釋為利用系統安裝器開啟程式,有些廠商在啟動的Intent是沒有帶Category, 而我們自己開啟程式是帶了Category:

https://blog.csdn.net/u010351494/article/details/72974477

導致的這種問題,最後通過再onCreate中新增如下程式碼,確實解決了問題:

if((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0){
    Log.d(TAG,"=====getIntent="+getIntent().toString());
    finish();
    return;
}

此問題的除錯花費了很多時間,剛開始以為是自己應用程式碼的問題,反覆除錯launchMode,懷疑是記憶體問題異常殺掉了應用的二級選單,反正都無果而終,最後還是靠查閱網上資料獲得方法。。