是否可以在OnStop()上回收所有数据并使用保留片段?

问题描述 投票:0回答:1

1)在activity的OnStop方法中回收所有位图和数据被认为是一种很好的策略。

2)使用保留器Fragment以避免在每次配置更改时重新创建数据也被认为是一种很好的策略。但我不知道这两者如何结合起来呢?

假设我使用片段加载一堆位图......在OnCreate中,我检查片段是否为空以获取它的数据或实例化一个新片段来创建它们。如果我在OnStop()上回收我的所有位图,那么在配置更改时将无法检索任何内容,因为所有数据都将被回收。

所以......我认为没有办法将这两种策略结合起来。我错了吗?如果不是最好使用哪两个?

我的案例是关于从SD卡文件夹加载图像。可能只有一张图片,可能是500张...并且显示图片并非我的应用程序都是这样做的,在此活动之后,其他活动可能需要记忆。

android android-fragments recycle retained-in-memory
1个回答
0
投票

来自Managing Bitmap Memory

在Android 2.3.3(API级别10)及更低版本上,建议使用recycle()。如果您在应用中显示大量位图数据,则可能会遇到OutOfMemoryError错误。 recycle()方法允许应用程序尽快回收内存。

根据这个,您甚至不需要在运行API 11或更高版本的设备上调用回收,因此它可能不是一个真正的问题。

如果应用程序被销毁,您实际上也不需要回收位图,因为系统将回收应用程序开始使用的所有内存。

只有在显示大量位图或大位图并且需要在应用程序仍在运行时回收的内存时,才需要进行回收。

另外需要注意的是,您正在尝试的策略是,您不会清除Activity的onStop()中的资源,而是保留Fragment的onDestroy()。保留片段上的OnDestroy()不会在配置更改时调用,因为片段永远不会被销毁。因此,您的资源可以保留在Activity的生命周期之外的内存中,并且会在应用程序生命周期结束时被销毁。

© www.soinside.com 2019 - 2024. All rights reserved.