簡體   English   中英

在子活動中的onPause中調用finish(),以便用戶重新關注父活動。 而是重新創建子活動

[英]Calling finish() in onPause in child activity so that user refocuses into parent activity. Child activity gets recreated instead

我從活動“ A”創建一個子活動“ B”。 如果用戶出於任何原因(最有可能按下主頁按鈕)離開應用程序,則我希望活動“ B”結束並且用戶恢復后應用程序處於活動“ A”。

如果我手動調用finish() ,則活動B結束,然后返回活動A。這是用戶離開應用程序時我想發生的行為。

我試圖在活動B的onPause()onStop()onUserLeavingHint()中調用finish() 。在每種情況下,這似乎都能正常工作,我可以看到mParent.finishFromChild(this); 被稱為內部活動B。

但是,一旦用戶切換回應用程序,活動B的onCreate()就被調用,並且用戶最終進入活動B。

當我從onStop() (或類似的)處理程序中調用finish()時,如何確保最終進入父活動?

更新:看來該問題與活動B被聲明為使用SingleInstance啟動模式有關。 刪除此功能似乎已解決了該問題。 更改此設置還引入了其他問題,此后我一直設法解決。

發生這種情況的原因是,活動B被設置為“單實例啟動模式”。 (由另一位開發人員)將其設置為此項的原因與我希望該活動在后台運行時結束該活動的原因有關–這是為了確保用戶無法通過回擊其他任何活動來達到此活動隨后從活動B發送的活動。

為了解決這個問題。 我首先確保無法從B創建任何活動。而是從B返回並將任何必需的Intent傳遞給A。簡化了后向堆棧。 (使用startActivityForResult()調用活動B是執行此操作的一種可能方式。)

現在,在這種情況下SingleInstance導致出現此問題的原因是,因為活動B是在單獨的新任務中啟動的。 當用戶嘗試恢復時,他們將重新輸入此單一活動任務。 該應用程序的其余部分在單獨的任務中運行。 可以合理預期該任務要做的唯一一件事就是重新啟動該活動。 當用戶按下按鈕時,它唯一可以做的就是關閉任務(因此似乎退出了該應用程序)。 為了實現預期的行為,用戶必須選擇另一個第一個任務(通過長時間單擊任務列表)。

希望這種自我解答可以幫助遇到類似問題的人。

暫無
暫無

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

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