【问题标题】:Drawable advantage over bitmap for memory in android与位图相比,在 android 中可绘制内存的优势
【发布时间】:2011-06-02 00:55:46
【问题描述】:

此问题与以下问题的答案相关:

Error removing Bitmaps[Android]

在内存释放方面,在 Android 中使用 Drawable 优于 Bitmap 有什么优势吗?

我正在查看 Romain Guy 项目 Shelves,他使用 SoftReference 进行图像缓存,但是当 SoftReference 自动回收位图的内存时,我无法搜索取消分配这些 Drawable 的代码在哪里。据我所知,必须在 Bitmap 上显式调用 .recycle() 才能解除分配。

【问题讨论】:

    标签: android bitmap memory-management drawable


    【解决方案1】:

    累加。到this page,从 API 级别 11 开始,Bitmap 像素数据与关联的 Bitmap 一起存储在 Dalvik Heap 中。因此实际上不需要调用 .recycle ,除非您想手动回收内存以供进一步使用。一定要取消对位图的引用,作为一种附加措施。

    PS:这是解释hackbod答案的链接。

    【讨论】:

      【解决方案2】:

      据我了解,如果您不需要进行太多图像处理,位图通常会更好地提高性能。但是,当我不手动回收它们时,我遇到了内存泄漏。我的解决方案是write a class 来帮助我管理我的图像,这提供了一种简单的方法来在我的应用程序的某些点回收我的所有位图。它还提供了一种简单的方法来重用已加载的资源(包括 Drawables)。

      【讨论】:

        【解决方案3】:

        您无需调用 Bitmap.reycle()。这将在其终结器中为您完成。在终结器中执行此操作意味着分配将延迟到终结器运行,因此在可能的情况下直接调用 recycle() 可以帮助进行内存管理。

        【讨论】:

        • no .recycle() 必须被调用,我在 stackoverflow 的某个地方看到 romain guy 评论告诉这样做,因为位图是本机分配的,如果没有这样做,那就是内存泄漏
        • 您可能想在错误地称呼他们之前检查用户个人资料。
        • @AustynMahoney 专家也可能是错的。听取专家的建议,但不要虔诚地遵循它。 “检查用户资料”远不如证明重要。任何人都没有提供任何证据或链接。无论如何来自hackbod的好答案。
        • 除此之外需要注意的重要一点是终结器不会运行,除非我相信它不再被引用。所以可能有些情况你还是想调用 Bitmap.recycle()
        • 这不只是专家……她可能编写了我们这里要讨论的 Android 代码。
        猜你喜欢
        • 1970-01-01
        • 2016-09-04
        • 1970-01-01
        • 1970-01-01
        • 2011-09-02
        • 2011-08-02
        • 2012-03-12
        • 2012-05-02
        • 2010-12-26
        相关资源
        最近更新 更多