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

时间:2013-08-07 18:40:08

标签: android android-intent out-of-memory activity-finish

像:

startActivity(intent);
finish();

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

所以,拨打finish() explicitly to prevent OutOfMemory Exception?

是个好主意

2 个答案:

答案 0 :(得分:32)

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

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

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

您可以在指南主题Tasks and Back Stack中详细了解相关信息。它还描述了如何正确处理活动之间的循环。

答案 1 :(得分:2)

如果您不需要Activity的实例,那么这样做很好。因此当你按下下一个Activity时,你知道你不会回到这个,但是Activity所在的堆栈下面的任何东西,或者如果没有那个,那么主屏幕就会回来。

但是,我不确定这是你获得OOM例外的原因,你应该知道它来自哪里。如果您使用Bitmap s,则可能导致异常。