1. 程式人生 > >Android App首次安裝完成後在安裝介面直接開啟應用,再按home鍵返回桌面,從桌面圖示重新進入app,返回不到之前的介面問題

Android App首次安裝完成後在安裝介面直接開啟應用,再按home鍵返回桌面,從桌面圖示重新進入app,返回不到之前的介面問題

概述

在做專案的時候遇到了,Android App首次安裝完成後在安裝介面直接開啟應用,再按home鍵返回桌面,從桌面圖示重新進入app,返回不到之前介面的問題;然而有一次完全退出應用後,這個問題就會消失。然後各種檢查程式碼覺得都沒有問題,後面通過對任務棧的實驗發現,這是因為從安裝介面開啟App,和從桌面開啟App的任務棧不一樣。導致了按home鍵退出後,從桌面圖示重新進入回不到之前按home鍵的頁面。也就是說這是android系統存在的bug。那我們該如何解決這個問題了?我目前發現有兩種方法可以解決這個問題。下面我們一起來看看。

方法一

程式碼如下:

if (intent.flags and
Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT != 0) { finish() return }

在你的主介面的onCreatesetContentView 前加上上面的程式碼就可以了。程式碼非常的簡單,但是其中涉及到了任務棧之間的銷燬和取出。這段程式碼的作用是判斷該應用是否已經存在了任務棧,如果已經存在就銷燬當前的任務棧,此時系統就會調出已經存在的任務棧,即你按home鍵退出時的介面所在 的任務棧,從而達到了解決問題的效果。

方法二

其實方法二和方法一的原理是一樣的,只是判斷方法不一樣,程式碼如下:

if (!isTaskRoot) {
    if (intent.hasCategory
(Intent.CATEGORY_LAUNCHER) && intent.action == Intent.ACTION_MAIN) { finish() return } }

上面的程式碼也很簡單,程式碼加的位置也和方法一的位置一樣。isTaskRoot 是系統api,作用是判斷Activity是不是任務棧的源Activity,不是就是說被系統重新例項化出來了,此時在判斷是否是主介面,如果是主介面就銷燬當前的任務棧,讓系統調出已經存在的任務棧。

上面的兩種方法通過實驗發現都可以解決該問題,至於選擇哪一種,就看你自己喜歡哪一種了。上面的程式碼是用kotlin寫的,在java中稍作轉換也就可以使用了。