【问题标题】:OutOfMemory in MuPdfMuPdf中的OutOfMemory
【发布时间】:2012-05-05 14:25:10
【问题描述】:

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

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

【问题讨论】:

  • 我也在寻找解决方案。当我在不同页面中打开和关闭 pdf 活动时收到内存不足错误。如果 mupdf 以低质量渲染没有问题,但是当它在 HQ 中渲染时(所以主要是在平板电脑 10.1 的全屏页面上以纵向模式渲染)它会溢出
  • mupdf 尝试从存储库更新,我有个问题消失了。

标签: android mupdf


【解决方案1】:

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

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

【讨论】:

  • 这解决了我在打开大约 10 个 PDF 后遇到的 OutOfMemoryError。谢谢!
【解决方案2】:

我在 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】:

    在mupdf.c里面找到

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

    更改内存限制并尝试

    我试过用 512 渲染比以前更快

    【讨论】:

    • 您无法通过这种方式修复内存泄漏!
    【解决方案4】:
    1. 编辑 mupdf.c

    改变: /* 128 MB 存储用于低内存设备。根据需要进行调整。 */ glo->ctx = ctx = fz_new_context(NULL, NULL, 128 ctx = ctx = fz_new_context(NULL, NULL, 32

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

    【讨论】:

    • 您无法通过这种方式修复内存泄漏。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 2012-12-13
    • 2019-07-15
    • 1970-01-01
    相关资源
    最近更新 更多