【问题标题】:android - rendering bitmaps from native code - nativeCreate bitmaps are not cleanedup from memoryandroid - 从本机代码渲染位图 - nativeCreate 位图不会从内存中清除
【发布时间】:2011-02-22 18:31:23
【问题描述】:

我在 android 中流式传输视频,我在本机代码中解码帧,然后将像素复制到位图,然后使用 canvas.unlockandpost 在 Java 中显示位图,并为所有位图使用 while 循环。

一切都很好,但是位图的流式传输非常慢并导致崩溃。我只在 logcat 上看到一条消息说“内存不足,没有更多的后台进程”。

我在 eclipse 的分配表上看到,我创建的位图没有从内存中删除,即使我每次都覆盖像素。有什么办法可以清理它保留的内存。

我的代码如下。

C 代码:

AndroidBitmapInfo  info;
void*              pixels;
int                ret;


if ((ret =AndroidBitmap_lockPixels(env, bitmap, &pixels)) < 0) {
}

memcpy(pixels, pictureRGB, 480*320);

AndroidBitmap_unlockPixels(env, bitmap);

Java 代码

     Bitmap mBitmap = Bitmap.createBitmap(480, 320, Bitmap.Config.RGB_565);
     renderbitmap(mBitmap, 0);
     canvas.drawBitmap(mBitmap, 0, 0, null);

【问题讨论】:

    标签: android crash bitmap android-emulator android-ndk


    【解决方案1】:

    您的问题中显示的代码缺少一些关键部分,无法完全理解您的问题,但听起来您正在为每一帧创建一个新的位图。由于 Android 仅允许为每个 Java VM 分配大约 16MB 的空间,因此您的应用程序将在大约 52 帧后被终止。您可以创建一次位图并多次重复使用它。更准确地说,您正在创建一个位图 (Bitmap.CreateBitmap),而不是破坏它 (Bitmap.recycle)。这将解决您的内存泄漏,但仍然不是处理它的最佳方法。由于位图大小不会改变,因此请在 Activity 开始时创建一次,并在 Activity 的整个生命周期内重复使用它。

    【讨论】:

      猜你喜欢
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多