Android 上的 Mupdf 内存泄漏

Mupdf memory leak on Android

我在 Android 应用程序中使用 MuPdf 库,我注意到一些内存泄漏。 当我多次打开一个 PDF 文档(打开它,关闭它,然后重新打开)时,每次打开 PDF 时我都可以看到 HEAP 大小增加,直到我的应用程序崩溃。

我已经看到这个问题 OutOfMemory in MuPdf 并尝试实施提供的修补程序但没有成功。

MuPdf 的错误追踪器本身似乎也存在一个未解决的错误:http://bugs.ghostscript.com/show_bug.cgi?id=695408

报告的 bug 已经开放了 5 个多月,我无法相信我是唯一一个在 Android 上使用 MuPdf 并遇到这些内存泄漏的人。

有人在 android 使用 MuPdf 可以帮助我吗?

该错误是针对 MuPDF 1.5(当前版本为 1.6)报告的,错误报告者没有提供用于调查的示例文件。

当前版本的 MuPDF 中没有已知的内存泄漏,如果您认为自己发现了内存泄漏,那么最好的办法就是打开错误报告。请确定并附上显示问题的文件!

此外,您应该使用标准演示应用程序对此进行测试,如果您不能用它重现内存泄漏,那么问题不在于 MuPDF,而是您的应用程序使用它的方式。可能您在关闭之前没有释放所有内容。

如果您想提问,MuPDF 开发人员可以在 irc.freenode.net 的 #ghostscript 频道的 IRC 中在线,并且通常能够回答问题。大部分时间是格林威治标准时间的办公时间,但有时会有人在线到深夜。该频道已记录,因此如果您在这些时间无法到达那里,请提出您的问题,有人会在他们看到时回复。

我在 Mono/Xamarin Android 应用程序的 MuPdf 中也遇到了这个问题。正如 KenS 提到的...

Possibly you aren't freeing everything before you close down.

我确实是这样,我通过在Activity的onDestroy()方法中调用ReaderView的.destroyDrawingCache()解决了这个问题。这似乎足够了,但如果我还应该做些什么来从 MuPdf 释放资源,请告诉我。

下面的 C# 代码示例(应该很容易转换为 Java):

private ReaderView _readerView;

...

protected override void OnDestroy()
{
    base.OnDestroy();

    _readerView.DestroyDrawingCache();
    _readerView = null;

    GC.Collect();
}