0

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

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

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

所以....我看不出有任何方法可以将这两种策略结合起来。我错了吗?如果不是,最好使用两者中的哪一个?

我的案例是关于从 SD 卡文件夹加载图像。可能只有一张图片,可能是 500 ......并且显示图片并不是我的应用程序所做的全部,因此在此活动之后可能需要其他活动来获取内存。

4

1 回答 1

0

管理位图内存

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

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

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

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

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

于 2014-10-24T19:33:13.187 回答