gpt4 book ai didi

android - 从 native 代码渲染位图 - nativeCreate 位图不会从内存中清除

转载 作者:行者123 更新时间:2023-12-03 16:56:50 29 4
gpt4 key购买 nike

我在android中流式传输视频,我用 native 代码解码帧,然后将像素复制到位图,然后使用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 仅允许为每个 Java VM 分配大约 16MB 的空间,因此您的应用程序将在大约 52 帧后被终止。您可以创建一次位图并多次重复使用它。更准确地说,您正在创建一个位图 (Bitmap.CreateBitmap),而不是破坏它 (Bitmap.recycle)。这将解决您的内存泄漏,但仍然不是处理它的最佳方法。由于位图大小不会改变,请在 Activity 开始时创建一次,并在 Activity 的整个生命周期内重复使用它。

关于android - 从 native 代码渲染位图 - nativeCreate 位图不会从内存中清除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5082255/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com