摘要如果後退堆棧中的活動已完成,Back按鈕是否會返回到之前的活動?
這裏是我的情況:
- 我的應用程序調用外部程序(PDF查看器)。
- 然後我完成()我的活動,啓動該應用程序(還有其他活動從我的應用程序仍然在活動堆棧中)。
- 如果用戶按下後退,那麼它只是退出該應用程序,而不是返回到我的應用程序。
Android應該通過Activity堆棧工作回來,直到它找到正在運行的Activity爲我的應用程序,還是會放棄它,如果它找不到以前的Activity?
如果我沒有完成()我的活動,然後返回按鈕返回到我的活動,所以我知道基本功能正在工作。
詳細
我的活動堆棧:
MainActivity - > LoginActivity - > ActivityA - > ActivityB
在這一點上,我相信adb shell dumpsys activity
確認堆棧:
組織胺#11:HistoryRecord {40c0c018 com.mypackage/com.mypackage.ActivityB}
組織胺#10:HistoryRecord {40d27af0 com.mypackage/com.mypackage.ActivityA}
組織胺#9:HistoryRecord {40d31368 COM .mypackage/com.mypackage.LoginActivity}
組織胺#8:HistoryRecord {40db2430 com.mypackage/com.mypackage.MainActivity}
組織胺#7:HistoryRecord {40c2a978 com.mypackage/com.mypackage.LoginActivity}
Hist#6:HistoryRecord {40bf6008 com.mypackage/com.mypackage.LoginActivity}
Hist#5:HistoryRecord {40542d58 com.htc.launcher/.Launcher}
現在,我的ActivityB啓動一個外部PDF查看器應用程序。
我的應用程序有一些特定的安全要求,這意味着我需要強制用戶重新輸入PIN碼,然後才能再次在應用程序中看到信息。
要做到這一點,當應用程序移動到後臺時,我播放了一個Intent,它告訴ActivityA和ActivityB完成()。
當用戶在PDF查看器中按下「後退」時,我希望它們返回到LoginActivity。不幸的是,該應用似乎退出。
PDF查看器已經啓動之後,adb shell dumpsys activity
顯示堆棧是:
組織胺#7:HistoryRecord {40b97a08 com.adobe.reader/.AdobeReader}
組織胺#6:HistoryRecord {40542d58融爲一體。 htc.launcher/.Launcher}
組織胺#5:HistoryRecord {40978318} com.google.android.gm/.ConversationListActivity
mLastPausedActivity:HistoryRecord {40b4aa90 com.mypackage/com.mypackage.ActivityB}
有沒有人知道這種情況應該如何工作?天真地說,我希望Android可以通過後端堆棧回溯到LoginActivity ...
我相信Android有權銷燬任何不再處於前臺的Activity,這裏的行爲也是如此只是未定義?
這個應用程序非常複雜,所以我不能完全拋棄現有的設計。有很多入口點(小部件,通知,後退按鈕)以及其他依賴於UI的功能被告知應用程序已被中斷。
我正在調查其他解決方法(例如,使用startActivityForResult
,設置0123Bfor ActivityB等),但我很想知道Android如何通過堆棧工作。
我不想回到完成的活動,但我期待後退按鈕返回到我的應用程序中仍在運行的其他活動。這個假設是錯誤的嗎? –