像:
startActivity(intent);
finish();
没有为前一个Activity调用finish() explicitly, onDestroy()
,我的内存耗尽(OutOfMemory Exception).
所以,拨打finish() explicitly to prevent OutOfMemory Exception?
答案 0 :(得分:32)
当您启动新活动时,当前活动将被推送到当前任务的后台堆栈。 (您可以通过标志和/或清单更改此行为,但这是默认行为。)当用户按下后退函数时,顶部活动结束并弹出堆栈。结果是用户看到应用程序返回上一个活动。
在开始新活动后调用finish()
完全没问题。结果将是当前活动(不再位于堆栈顶部,因为您刚开始新的活动)将从堆栈中删除。然后,当用户按下Back时,它将转到后台堆栈上的上一个活动(如果堆栈为空,则退出应用程序)。
如果你在活动A和B之间来回反复,总是开始一个新活动并且从不调用finish()
,这可能会导致OOM异常,因为堆栈填满了每个活动的实例。
您可以在指南主题Tasks and Back Stack中详细了解相关信息。它还描述了如何正确处理活动之间的循环。
答案 1 :(得分:2)
如果您不需要Activity
的实例,那么这样做很好。因此当你按下下一个Activity
时,你知道你不会回到这个,但是Activity
所在的堆栈下面的任何东西,或者如果没有那个,那么主屏幕就会回来。
但是,我不确定这是你获得OOM
例外的原因,你应该知道它来自哪里。如果您使用Bitmap
s,则可能导致异常。