Android App首次安裝完成後在安裝介面直接開啟應用,再按home鍵返回桌面,從桌面圖示重新進入app,返回不到之前的介面問題
阿新 • • 發佈:2019-02-14
概述
在做專案的時候遇到了,Android App首次安裝完成後在安裝介面直接開啟應用,再按home鍵返回桌面,從桌面圖示重新進入app,返回不到之前介面的問題;然而有一次完全退出應用後,這個問題就會消失。然後各種檢查程式碼覺得都沒有問題,後面通過對任務棧的實驗發現,這是因為從安裝介面開啟App,和從桌面開啟App的任務棧不一樣。導致了按home鍵退出後,從桌面圖示重新進入回不到之前按home鍵的頁面。也就是說這是android系統存在的bug。那我們該如何解決這個問題了?我目前發現有兩種方法可以解決這個問題。下面我們一起來看看。
方法一
程式碼如下:
if (intent.flags and Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT != 0) {
finish()
return
}
在你的主介面的onCreate
的setContentView
前加上上面的程式碼就可以了。程式碼非常的簡單,但是其中涉及到了任務棧之間的銷燬和取出。這段程式碼的作用是判斷該應用是否已經存在了任務棧,如果已經存在就銷燬當前的任務棧,此時系統就會調出已經存在的任務棧,即你按home鍵退出時的介面所在 的任務棧,從而達到了解決問題的效果。
方法二
其實方法二和方法一的原理是一樣的,只是判斷方法不一樣,程式碼如下:
if (!isTaskRoot) {
if (intent.hasCategory (Intent.CATEGORY_LAUNCHER) && intent.action == Intent.ACTION_MAIN) {
finish()
return
}
}
上面的程式碼也很簡單,程式碼加的位置也和方法一的位置一樣。isTaskRoot
是系統api,作用是判斷Activity是不是任務棧的源Activity,不是就是說被系統重新例項化出來了,此時在判斷是否是主介面,如果是主介面就銷燬當前的任務棧,讓系統調出已經存在的任務棧。
上面的兩種方法通過實驗發現都可以解決該問題,至於選擇哪一種,就看你自己喜歡哪一種了。上面的程式碼是用kotlin寫的,在java中稍作轉換也就可以使用了。