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

Posted

技术标签:

【中文标题】是否可以在 OnStop() 回收所有数据并使用保留片段?【英文标题】:Is it possible to recycle all data at OnStop() AND use a retainer Fragment? 【发布时间】:2014-10-24 18:45:52 【问题描述】:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

来自Managing Bitmap Memory:

android 2.3.3(API 级别 10)及更低版本上,使用 recycle() 是 受到推崇的。如果您在您的 应用程序,您可能会遇到 OutOfMemoryError 错误。回收() 方法允许应用尽快回收内存。

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

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

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

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

【讨论】:

以上是关于是否可以在 OnStop() 回收所有数据并使用保留片段?的主要内容,如果未能解决你的问题,请参考以下文章

Ipad在保和过保回收报价

Activity的生命周期

ipad在保。过保回收

Linu自动保号脚本,不用担心号码被回收咯

是否保证调用 Activity.onStop() (API 11 +)

Android保活方案