内存不足时完成活动

时间:2012-07-18 12:55:56

标签: android back-stack

我的应用程序中有一个活动A启动活动B.当我的应用程序停止并且android系统的内存很低时,我的应用程序将从后栈清除。当我再次启动我的应用程序时,在实例化活动B期间发生异常。所以我想确保在内存不足时完成活动B,因此不会发生异常。我已经尝试将finish()放在onMemoryLow()中,但它没有用。我还能做什么?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

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

使用如下的静态变量创建一个类:

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;
}