1. 程式人生 > >Android打release包時按Home鍵,再按桌面icon時出現app重新啟動的問題

Android打release包時按Home鍵,再按桌面icon時出現app重新啟動的問題

在專案開發中遇到了按Home鍵,再按桌面icon時出現app重新啟動的問題,這個時候我們將啟動的那個activity(一般為廣告頁面GuideActivity)的啟動模式android:launchMode="singleTask"去掉即可,但是有些APP很奇怪,debug版本沒問題,但是當我們打release包時就出現上述問題啦,開始發現這個問題,我以為是app被系統kill了,但是經過我多次除錯與分析,發現當開啟app後,再按home鍵回到桌面時,這時不點選app圖示,而是啟動任務列表,從任務列表中恢復app,就不會出現這個問題,所以排除了被系統kill的因素。查閱了相關資料後才得以解決:

主要原因是:每次啟動Intent導致新建立Task的時候,該Task會記錄導致其建立的Intent;而如果後續需要有一個新的與建立Intent完全一致(完全一致定位為:啟動類,action、category等等全部一樣,不可多項也不可缺少),那麼該Intent並不會觸發Activity的新建啟動,而只會將已經存在的對應Task移到前臺;這也就是為什麼桌面會在再次點選圖示時將後臺任務挪到前臺而不是重新啟動App的實現。

解決辦法:

  1. 在啟動頁的Activity中的 onCreate()方法加入以下程式碼:

           @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         avoidLauncherAgain();         setContentView(R.layout.activity_advert);     }      private void avoidLauncherAgain(){         // 避免從桌面啟動程式後,會重新例項化入口類的activity         if (!this.isTaskRoot()) { // 判斷當前activity是不是所在任務棧的根             Intent intent = getIntent();             if (intent != null) {                 String action = intent.getAction();                 if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(action)) {                     finish();                 }             }         }

2.啟動頁Activity在finish後的activity中設定啟動模式為singleTask,