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

时间:2014-10-24 18:45:52

标签: android android-fragments recycle retained-in-memory

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

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

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

所以....我没有看到任何方法来结合这两种策略。我错了吗?如果不是最好使用哪两个?

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

1 个答案:

答案 0 :(得分:0)

来自Managing Bitmap Memory

  

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

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

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

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

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