2

我的应用中有一个 Activity A 启动 Activity B。当我的应用程序停止并且android系统的内存不足时,我的应用程序将从后台堆栈中清除。当我再次启动我的应用程序时,在实例化 Activity B 期间发生了异常。所以我想确保 Activity B 在内存不足时完成,这样就不会发生异常。我曾尝试将finish() 放在onMemoryLow() 中,但没有奏效。我还可以做些什么?

4

2 回答 2

3

这可能无法回答您的整个问题,但它仍然会有所帮助。

首先要注意的是,当整个 Android 系统内存不足时,将调用 onLowMemory()。这与您的应用或活动无关。因此,覆盖该方法并不能确保您的 Activity 完成。

也许如果您的 Activity 是在 Andorid 系统的内存中(即在调用 onDestroy() 之前)并且如果您已经覆盖了 onLowMemory(),那么它将对您有所帮助。但除此之外,没有可能做到这一点。否则,您必须在进入活动之前检查所需的条件。

于 2012-07-18T13:12:51.490 回答
2

如果它在后台,Android 只会杀死你的进程。当用户返回应用程序时,Android 会重新创建进程并重新创建位于 Activity 堆栈顶部的 Activity。您需要对您的活动进行编程,以便它们可以像这样运行(即:重新启动后重新创建)。如果您不能这样做,您可以尝试以下方法:

创建一个带有静态变量的类,如下所示:

public class Globals {
    public static boolean initialized;
}

创建(或重新创建)流程时,该变量Globals.initialized将具有该值。false

现在,在您的 中ActivityA,当您设置ActivityB依赖的数据时,您可以设置初始化标志,如下所示:

Globals.initialized = true;

ActivityB.onCreate()中,检查 的值,initialized如果未设置,只需调用finish()它将带用户返回ActivityA,如下所示:

if (!Globals.initialized) {
    finish(); // Process was recreated while ActivityB was on top of the stack,
              //  so finish now
    return;
}
于 2012-07-18T13:25:06.480 回答