Android 再次打開APP進入按Home鍵退出時的界面(thisTaskRoot)


 

問題

  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

      

   

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM