如果后台堆栈中的活动已完成,“返回”按钮是否会返回到之前的“活动”?

时间:2011-10-25 22:00:13

标签: android android-activity

摘要

这是我的情景:

  • 我的应用启动外部应用程序(PDF查看器)。
  • 然后我完成()我的Activity启动了该应用程序(我的应用程序中的其他活动仍在活动堆栈中)。
  • 如果用户按下Back,则只退出该应用,而不是返回我的应用。

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如何通过堆栈工作。

1 个答案:

答案 0 :(得分:0)

当您完成()您的活动时,它会从堆栈中删除。

除非再次创建,否则你不能再回头了。