摘要
这是我的情景:
Android应该通过Activity堆栈返回,直到找到我的应用程序正在运行的Activity,或者如果它找不到上一个Activity,它会放弃吗?
如果我没有完成()我的Activity,那么Back按钮将返回到我的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}
历史#6:HistoryRecord {40bf6008 com.mypackage / com.mypackage.LoginActivity}
历史#5:HistoryRecord {40542d58 com.htc.launcher / .Launcher}
现在,我的ActivityB启动了一个外部PDF查看器应用程序。
我的应用程序有一些特定的安全要求,这意味着我需要强制用户重新输入他们的PIN,然后才能再次在应用中查看信息。
要做到这一点,当应用程序移动到后台时,我会广播一个Intent,告诉ActivityA和ActivityB完成()。
当用户在PDF查看器中按Back时,我希望它们返回到LoginActivity。不幸的是,应用程序似乎退出了。
PDF查看器启动后,adb shell dumpsys activity
显示堆栈为:
历史#7:HistoryRecord {40b97a08 com.adobe.reader / .AdobeReader}
历史#6:HistoryRecord {40542d58 com.htc.launcher / .Launcher}
历史#5:HistoryRecord {40978318 com.google.android.gm/.ConversationListActivity}
mLastPausedActivity:HistoryRecord {40b4aa90 com.mypackage / com.mypackage.ActivityB}
有人知道这种情况应该如何运作吗?天真地,我希望Android能够通过后台堆栈直到达到LoginActivity ...
我相信Android保留销毁不再在前台的任何活动的权利,这里的行为是不确定的?
这个应用程序非常复杂,所以我不能完全抛弃现有的设计。有许多入口点(小部件,通知,后退按钮)和其他功能,这些功能取决于被告知应用程序已被中断的UI。
我正在调查其他解决方法(例如使用startActivityForResult
,为ActivityB设置Intent.FLAG_ACTIVITY_NO_HISTORY
等),但我很想知道Android如何通过堆栈工作。
答案 0 :(得分:0)
当您完成()您的活动时,它会从堆栈中删除。
除非再次创建,否则你不能再回头了。