26

喜欢:

startActivity(intent);
finish();

不调用finish() explicitly, onDestroy()前一个Activity是不调用的,我的内存用完了(OutOfMemory Exception).

那么,打电话是个好主意吗finish() explicitly to prevent OutOfMemory Exception?

4

3 回答 3

39

当你开始一个新的活动时,当前活动被推到当前任务的后栈中。(您可以通过标志和/或清单更改此行为,但这是默认行为。)当用户按下后退功能时,顶部活动完成并弹出堆栈。结果是用户看到应用程序返回到上一个活动。

finish()开始新活动后打电话是完全可以的。结果将是当前活动(不再位于堆栈顶部,因为您刚刚开始了一个新活动)将从堆栈中删除。然后当用户按下 Back 时,它会转到返回堆栈上的上一个活动(如果堆栈为空,则退出您的应用程序)。

如果您总是在活动 A 和 B 之间来回跳动,总是启动一个新的并且从不调用finish(),这可能会导致 OOM 异常,因为堆栈填满了每个活动的实例。

您可以在指南主题Tasks 和 Back Stack中阅读有关此内容的更多信息。它还描述了如何正确处理活动之间的循环。

于 2013-08-07T18:45:45.570 回答
2

如果您不需要 that 的实例,这样做很好Activity。因此,当您按下下一个时Activity,您知道您不会回到这个,而是在堆栈下方的任何内容Activity或主屏幕上(如果没有更多内容)。

但是,我不确定这就是您遇到OOM异常的原因,您可能应该弄清楚它是从哪里来的。如果您使用Bitmaps 那么这可能会导致异常。

于 2013-08-07T18:43:11.643 回答
1

或者,在清单中,您可以将 android:noHistory="true" 添加到活动中,当您离开活动时,它不会将其添加到后台堆栈。

于 2021-08-25T03:52:08.783 回答