MuPdf中的OutOfMemory

时间:2012-04-24 21:53:43

标签: android mupdf

您好我在我的项目中使用MuPdf库来查看文档。问题是,当您在平板电脑上11英寸的活动中打开3-7个文档时,我会出现内存溢出。加载新文档时,将销毁对上一个文档的所有引用,但不会删除内存中文档的图像。在10-12兆字节的内存映像中创建对象。 在7英寸大小的平板电脑上,这个问题不会出现。

也许有人遇到过这个问题?

4 个答案:

答案 0 :(得分:2)

通过在PageView.java的recycle()方法中的位图上调用relaeseBitmaps()来解决此问题

public void releaseBitmaps() {
        reinit();
        mEntireBm.recycle();
        mPatchBm.recycle();
        mEntireBm = null;
        mPatchBm = null;
    }

答案 1 :(得分:0)

在mupdf.c里面找

“/ * 128 MB存储用于低内存设备。根据需要调整。* /”和

更改内存限制并尝试

我尝试使用512渲染比之前更快

答案 2 :(得分:0)

我添加了以下代码以强制在PageView.java中使用垃圾收集器,到目前为止似乎没有问题。

if (mEntireBm == null || mEntireBm.getWidth() != newSize.x
                              || mEntireBm.getHeight() != newSize.y) {
            mEntireBm = Bitmap.createBitmap(mSize.x, mSize.y, Bitmap.Config.ARGB_8888);
            System.gc();//Added
            Runtime.getRuntime().gc();//Added
        }

编辑:多次打开文件后崩溃

答案 3 :(得分:-1)

  1. 编辑mupdf.c
  2. 变化: / * 128 MB存储用于低内存设备。根据需要调整。 * /     glo-> ctx = ctx = fz_new_context(NULL,NULL,128<< 20); 至 / * 128 MB存储用于低内存设备。根据需要调整。 * /     glo-> ctx = ctx = fz_new_context(NULL,NULL,32<< 20);

    这就是全部。 最大堆内存量~50Mb。