簡體   English   中英

Android 在按下后重新打開應用程序時跳過啟動畫面

[英]Android skipping the splash screen when re-opening the app after having pressed back

所以我的情況就是這樣。 假設有一個MainActivity ,它唯一的工作就是啟動,調用installSplashScreen().setKeepOnScreenCondition { true }以使用新的向后兼容 API 顯示啟動畫面,然后在檢查一些 state 之后它確實startActivity(SomeActivity); finish() startActivity(SomeActivity); finish()

現在我們在SomeActivity上,如果我們按下主頁按鈕,應用程序就會在后台消失。 然后如果我們點擊啟動圖標, SomeActivity正確啟動,並且MainActivityonCreate永遠不會被調用,因此啟動屏幕不會再次顯示,並且SomeActivity立即顯示。

但是,如果我們不按主頁按鈕,而是按返回按鈕,並且應用程序以這種方式在后台運行,那么當我們單擊啟動器圖標時,會再次調用MainActivityoncreate ,並且啟動屏幕圖標會閃爍一小段時間分數也使它看起來很刺耳。

我的問題是,這聽起來像是我的一些錯誤配置,還是只要我不在單個活動架構上,我就會堅持這種行為?

每次您必須清除堆棧時調用啟動器活動,這意味着您必須在清單中使用一個標志來告訴您的應用不要將活動保持在后台嘗試android:launchMode="singleTask"在活動清單中的activity標簽內每次 go 到后台時,您都想被殺死,並且就應該顯示多少時間飛濺而言,您可以在計時器完成后使用計時器,然后您的 someActivity 將被調用。

只要我想恢復的活動不是啟動器活動,我所面臨的問題似乎就沒有解決方案。

文檔
“根啟動器活動是聲明帶有 ACTION_MAIN 和 CATEGORY_LAUNCHER 的 Intent 過濾器的活動。這些活動是獨一無二的,因為它們充當從應用程序啟動器進入您的應用程序的入口點,並用於啟動任務。

Android 12 及更高版本上的系統行為 系統將活動及其任務移至后台,而不是完成活動。 當使用主頁按鈕或手勢導航出應用程序時,此行為與默認系統行為相匹配。”

閱讀有關 Android 12 及以后版本的新返回行為的文檔告訴我們,當您在堆棧上沒有其他內容時按返回將就像您按下主頁按鈕一樣。 這里有一個很大的例外,那就是當您重新打開應用程序時,如果您剛剛彈出的不是啟動器活動,那么它仍然需要啟動該啟動器活動並且無法從您離開的地方恢復在熱的 state 中,正是我再次看到啟動畫面的原因。

所以我認為我最好的選擇是暫時忽略這一點,或者將我的應用程序修復為單活動應用程序,或者至少通過按返回將啟動器應用程序保持為您存在應用程序的頂級應用程序

舉幾個例子,如果想體驗我的意思,復制步驟是:

  1. 打開應用程序
  2. 按下后退按鈕,這會將您從應用程序發送到主屏幕
  3. 再次點擊應用圖標

截至今天,谷歌照片和谷歌播客等應用程序不再引起轟動。 相比之下,像谷歌地圖、Twitter、Spotify 這樣的應用程序確實在短時間內再次出現了飛濺。

你很困惑。 按 BACK 按鈕不會“將應用程序發送到后台”。 BACK 按鈕的默認行為(假設您沒有覆蓋它並提供您自己的行為)是完成當前的Activity 通常這會將用戶帶到當前任務中的上一個Activity 在您的情況下,任務堆棧中沒有其他Activity ,因此當前任務為空。 這在用戶看來可能是“應用程序被發送到后台”,但實際上后台沒有任何內容。 您的應用程序的任務是空的,所以它消失了。

當用戶然后點擊主屏幕上的應用程序圖標或點擊最近任務列表中的應用程序任務時,沒有現有任務可以帶到前台,因此通過創建新任務並啟動應用程序再次啟動應用程序根Activity (在您的情況下為MainActivity )到新創建的任務中。

如果您希望 BACK 按鈕僅將您的應用程序置於后台(而不是在SomeActivity上調用finish() ,這是默認行為),那么只需覆蓋 SomeActivity 中的SomeActivity onBackPressed()並執行以下操作:

moveTaskToBack(true);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM