我開發一個Android應用程序,我想效仿谷歌官方應用加的相同的行爲在打開時打開,裏面是:檢測程序時,剛開始還是從最近訪問的應用
- 如果該應用程序仍處於最近的應用程序列表中,並且您打開它(從圖標或最近的應用程序,這沒關係),您將從您離開的位置恢復應用程序。
- 如果應用程序不再位於最近的應用程序列表中,並且您打開它,您將看到一個啓動畫面,然後轉到主頁。
我的應用程序有一個使用導航抽屜和幾個片段作爲頁面的活動。我的目標是保留當前片段,並在應用程序從最近的應用程序恢復時顯示它。我可以設法使用SharedPreferences
,通過存儲當前片段的標籤並在用戶重新打開應用程序時加載它。問題是解決方案是這種數據是持久的,因此即使用戶首先將應用程序從最近的應用程序列表中刪除並重新打開,用戶也會始終接到最後一頁。
那麼如何檢測應用程序是否已經在最近的應用程序列表中?或者是否有任何方法在從該列表中刪除應用程序時調用,以便我可以清除SharedPreferences
中的最後一個片段標記?或者我使用了錯誤的方法?
感謝您耐心閱讀本文。
您看到的行爲是自動的,假設用戶在短時間內(〜30分鐘)內返回應用程序。不過,您需要將狀態保存在已保存的實例狀態「Bundle」中。請注意,除非手動刪除,否則在Android 5.0及更高版本中,應用程序始終處於總覽屏幕(最近的應用程序列表)中。 – CommonsWare
@CommonsWare感謝您的回覆。我現在使用'onSaveInstanceState'並使用日誌我發現它切換到另一個應用程序時實際被調用。我現在面臨的問題是,當我重新打開應用程序時不會觸發'onRestoreInstanceState',因此數據不會被恢復。我也在'onCreate'中做了一個檢查,看看bundle是否爲null。但是,當我傾斜設備並保持正確的碎片時,它確實有效。 –
「我現在面臨的問題是,當我重新打開應用程序以使數據未恢復時,未觸發onRestoreInstanceState」 - 請詳細解釋如何對此進行測試。請注意,在按HOME的情況下,如果您的進程仍在運行,那麼通過最近的任務列表返回到應用程序,將在您的活動中調用的唯一與生命週期相關的方法是onStart()和onResume ()'。您不需要實例狀態,因爲您的活動仍然存在。 – CommonsWare