在Android中启动新活动后调用finish()是个好主意吗?

Mar*_*hun 25 android out-of-memory android-intent activity-finish

喜欢:

startActivity(intent);
finish();
Run Code Online (Sandbox Code Playgroud)

没有调用finish() explicitly, onDestroy()就没有调用前Activity,而我的内存耗尽(OutOfMemory Exception).

所以,打电话是个好主意 finish() explicitly to prevent OutOfMemory Exception?

Ted*_*opp 32

当您启动新活动时,当前活动将被推送到当前任务的后台堆栈.(您可以通过标志和/或清单更改此行为,但这是默认行为.)当用户按下后退函数时,顶部活动结束并弹出堆栈.结果是用户看到应用程序返回到上一个活动.

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

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

您可以在指南主题" 任务"和"后台堆栈"中阅读更多相关信息.它还描述了如何正确处理活动之间的循环.


cod*_*gic 2

如果您不需要该实例,那么这样做就可以了Activity。因此,当您按返回下一个时,Activity请知道您不会返回到此屏幕,而是返回到该屏幕下方的堆栈中的任何内容Activity或主屏幕(如果没有更多内容)。

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