我的应用中有一个 Activity A 启动 Activity B。当我的应用程序停止并且android系统的内存不足时,我的应用程序将从后台堆栈中清除。当我再次启动我的应用程序时,在实例化 Activity B 期间发生了异常。所以我想确保 Activity B 在内存不足时完成,这样就不会发生异常。我曾尝试将finish() 放在onMemoryLow() 中,但没有奏效。我还可以做些什么?
2 回答
这可能无法回答您的整个问题,但它仍然会有所帮助。
首先要注意的是,当整个 Android 系统内存不足时,将调用 onLowMemory()。这与您的应用或活动无关。因此,覆盖该方法并不能确保您的 Activity 完成。
也许如果您的 Activity 是在 Andorid 系统的内存中(即在调用 onDestroy() 之前)并且如果您已经覆盖了 onLowMemory(),那么它将对您有所帮助。但除此之外,没有可能做到这一点。否则,您必须在进入活动之前检查所需的条件。
如果它在后台,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;
}