問題 Android 設置頁面的啟動模式為 singletask 之後,當按Home 退出時,再重新打開應用,還會進入首啟動頁。就會造成一些應用需要重新登錄,當前頁數據丟失等問題 解決 去除啟動頁的 singletask 的啟動模式(AndroidManifest.xml) 在啟動頁activity ...
問題
Android 設置頁面的啟動模式為 singletask 之後,當按Home 退出時,再重新打開應用,還會進入首啟動頁。就會造成一些應用需要重新登錄,當前頁數據丟失等問題
解決
-
去除啟動頁的 singletask 的啟動模式(AndroidManifest.xml)
-
在啟動頁activity添加如下代碼
1 // 避免從桌面啟動程式後,會重新實例化入口類的activity 2 if (!this.isTaskRoot()) { // 判斷當前activity是不是所在任務棧的根 3 Intent intent = getIntent(); 4 if (intent != null) { 5 String action = intent.getAction(); 6 if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(action)) { 7 finish(); 8 return; 9 } 10 } 11 }
分析
雖然我們解決了問題,但我們也要分析解決問題的思路。
哈哈哈,可能你說思路就是百度,別人這樣寫,反正我用了也成功了。(but 我們要往優秀程式員的方向發展)
-
第一步(看代碼進行了什麼處理)
第二行: this.isTaskRoot() 判斷是否是activity棧 最下方一個
第三行:getIntent() 獲取該上一個頁面傳過來的intent的信息。因為在啟動頁中,我們會設置
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
第六行:判斷是否通過啟動頁啟動,也有可能是代碼中的需求跳轉,這種情況不能把頁面銷毀了。
第七行:銷毀當前啟動頁
【思考】那麼為什麼如果是外部啟動的就 finish 呢?
-
第二步(看看別人怎麼說)
參考1:https://www.jianshu.com/p/eea14ca0b164