【问题标题】:How is a bitmap's memory managed on Android?Android 上如何管理位图的内存?
【发布时间】:2016-01-31 14:02:58
【问题描述】:

我在 Android 开发者上关注this article,其中引用了:

在 Android 2.3.3(API 级别 10)及更低版本上,支持像素数据 位图存储在本机内存中。它与位图分开 本身,存储在 Dalvik 堆中。本机中的像素数据 内存没有以可预测的方式释放,可能会导致 应用程序短暂超出其内存限制并崩溃。作为 Android 3.0(API 级别 11),像素数据存储在 Dalvik 堆以及相关的位图。

another article 让我更加困惑:

位图是一个围绕本机堆内存区域的瘦包装器,它 存储像素数据。

我有很多疑问:

  1. Dalvik 堆、本机堆和本机内存有什么区别?
  2. 位图与像素数据有何不同?我的理解是任何图像文件(除非它是矢量图像)都称为位图 - 被压缩。 Android 解压缩/解码此信息以在屏幕上呈现像素。如果我是正确的,为什么我们需要压缩位图了?
  3. BitmapRegionDecoder 这样的类是如何工作的?我的理解是首先解码/解压缩整个位图,然后忽略超出范围的区域-这将有助于提高内存效率,但不会使解码更快。我说的对吗?
  4. 位图被回收后究竟会发生什么?

【问题讨论】:

    标签: java android memory bitmap garbage-collection


    【解决方案1】:

    当出现 OutOfMemoryError 时,请尝试以下代码。

    try {
        bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), m, true);
        return bitmap;
    } catch (OutOfMemoryError e) {
        bitmap.recycle();
        bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), m, true);
        return bitmap;
    }
    

    【讨论】:

    • 这不是在回答我的任何问题。
    猜你喜欢
    • 2012-02-22
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 2015-07-11
    相关资源
    最近更新 更多