您好,我在我的项目中使用 MuPdf 库来查看文档。问题是,当您在平板电脑上的 11 英寸活动中打开 3-7 个文档时,我会出现内存溢出。当您加载一个新文档时,对前一个文档的所有引用都将被销毁,但不会从内存中删除该文档的图像。对象在 10-12 兆字节的内存映像中创建。在 7 英寸大小的平板电脑上不会出现此问题。
也许有人遇到过这个问题?
通过在PageView.javarecycle()
的方法中调用位图解决了这个问题relaeseBitmaps()
public void releaseBitmaps() {
reinit();
mEntireBm.recycle();
mPatchBm.recycle();
mEntireBm = null;
mPatchBm = null;
}
在 mupdf.c 里面找到
“/* 128 MB 存储用于低内存设备。根据需要进行调整。*/”和
更改内存限制并尝试
我尝试使用 512 渲染比以前更快
我添加了以下代码来强制 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
}
编辑:多次打开文件后崩溃
更改:/* 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。