Android后退堆栈和内存回收

3

我正在学习 Android 应用程序开发。我正在阅读有关系统如何管理活动的内容。

通过阅读这份文档,我有点困惑了。

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

根据文档,系统只推送和弹出活动 (不进行重新排序,对于堆栈来说这很有意义),但是它指出如果没有足够的内存可用,系统可以回收内存。为了选择要删除的活动,系统总是选择在后台的那个。因此,假设它正在删除活动 A3。但 A3 位于堆栈的底部。如何在不重新排序应用程序 A 的堆栈的情况下删除 A3 呢?

希望我的问题表述清楚了。

谢谢。

2个回答

1

当一个活动被从内存中移除时,后退栈不会改��。

然而,当用户按下后退按钮并返回到已回收的活动时,如果您没有在onSaveInstanceState()中明确保存并从savedInstanceBundle参数中重新加载任何状态,在onCreate()中),它将会丢失。


好的,它在后台堆栈中维护了一个指向活动的指针,并销毁了活动但未销毁指针,因此一旦内存可用并且用户按下返回键,它就可以重新创建活动。明白了,谢谢! - newbee

0

正如您所指出的那样,Android系统不会重新排序堆栈。它遵循进程生命周期,其中包含活动的进程将被终止,而不是堆栈上的单个活动。请记住,默认情况下,每个应用程序都是一个独立的进程,其中维护着活动堆栈。因此,应用程序A和应用程序B的活动堆栈将是分开且独立的。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接