【问题标题】:Android back stack and Memory reclaimAndroid 回栈和内存回收
【发布时间】:2013-03-09 01:44:37
【问题描述】:

我正在学习安卓应用开发。我正在阅读有关系统如何管理活动的信息。

通过阅读this 文档。这是混乱。

  1. 我创建了应用 A(从主屏幕),其中包含 3 个活动 A1、A2、A3 [这是任务 A]
  2. 我创建了具有 3 个活动 B1、B2、B3 的应用 B(从主屏幕)[这是任务 B] 其中 A1 和 B1 分别是应用 A 和 B 中的栈顶。

根据文档系统仅推送和弹出活动(没有重新排序,这对堆栈有意义)但是,它声明系统可以回收内存以防没有足够的可用内存。 并选择要删除系统的活动总是选择在后台的活动。所以说它 删除活动 A3。但是 A3 在堆栈的底部。如何在不重新排序应用 A 的堆栈的情况下移除 A3?

我希望我的问题很清楚

谢谢你,

【问题讨论】:

    标签: android android-activity


    【解决方案1】:

    从内存中删除活动时,后退堆栈不会更改。

    但是,当用户点击后退按钮并返回到已回收的活动时,您未专门保存在 onSaveInstanceState() 中的任何状态(并从 onCreate() 中的 savedInstanceBundle 参数重新加载)会丢失。

    【讨论】:

    • 好的,所以它的类型 a 在后台堆栈中维护指向活动的指针并销毁活动但不销毁指针,因此一旦内存可用并且用户按下后退键,它就可以重新创建它。知道了。谢谢!
    【解决方案2】:

    Android 系统不会像您正确指出的那样重新排序堆栈。它遵循Process Lifecycle,其中包含活动的进程 被终止,而不是堆栈上的单个活动。请记住,默认情况下,每个应用程序都是维护活动堆栈的单独进程。所以app A和app B的activity stack会是分开独立的。

    例如,任务 A 在后台运行 A1、A2 和 A3 活动。任务 A 是一个过程。当android需要回收内存时,它将终止包含所有活动A1,A2,A3的进程Task A。因此,此时 Task A 中哪个 Activity 位于堆栈顶部并不重要。

    【讨论】:

      猜你喜欢
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      相关资源
      最近更新 更多