2012-04-24 96 views
3

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

也许有人遇到这个问题?

+0

我也在寻找一个解决方案的relaeseBitmaps()方法对位图调用recycle()解决。当我在不同的页面打开和关闭pdf活动时,我收到了一个outofmemory错误。如果mupdf以低质量渲染没有问题,但是当它在HQ中渲染时(主要是在平板电脑10.1的全屏页面上以纵向模式显示),它会溢出 – markov00 2012-05-13 22:45:40

+0

mupdf尝试从存储库更新,我有一个问题消失。 – alezhka 2012-05-14 08:43:14

回答

0

里面mupdf.c找到

“/ * 128 MB店低内存设备。必要时扭捏。* /” 和

变化的内存限制,并尝试

我试着用512渲染速度比以前更快

+0

您无法通过这种方式修复内存泄漏! – prageeth 2014-07-07 08:22:00

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 
     } 

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

-1
  1. 编辑mupdf.c

变化: /* 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。

+0

您无法以这种方式修复内存泄漏。 – prageeth 2014-07-07 08:21:08

2

此问题是由PageView.java

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

这解决了OutOfMemoryError后约10 PDF打开后获得。感谢你! – prageeth 2014-07-07 07:02:22