繁体   English   中英

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

[英]Is it a good idea to call finish() after starting a new Activity in Android?

喜欢:

startActivity(intent);
finish();

如果没有finish() explicitly, onDestroy()调用finish() explicitly, onDestroy()则不会为前一个Activity调用finish() explicitly, onDestroy() ,并且我的内存不足(OutOfMemory Exception).

那么, finish() explicitly to prevent OutOfMemory Exception?调用finish() explicitly to prevent OutOfMemory Exception?是一个好主意finish() explicitly to prevent OutOfMemory Exception?

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

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

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

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

如果您不需要该Activity的实例,这样做很好。 因此,当你按下下一个Activity知道你不会回到这个,但是那个Activity所在的堆栈下面的东西,或者如果没有更多活动的话。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM