android - 加载大 PDF 时应用程序崩溃

标签 android pdf out-of-memory

有人知道如何在 Android 中加载大的 pdf 文件吗?我使用“android-pdf-viewer”来加载那种文件。它在文件很小的时候起作用。但是一旦文件太大(例如150M),就会抛出OOM异常。

11-28 21:07:43.596 7844-8419/com.example.caoweizhao.readerapp E/art: Out 
of memory: Heap Size=192MB, Allocated=83MB, Capacity=192MB
11-28 21:07:43.596 7844-8419/com.example.caoweizhao.readerapp W/art: 
Throwing OutOfMemoryError "Failed to allocate a 134209548 byte 
allocation with 16777216 free bytes and 108MB until OOM"
11-28 21:07:43.607 7844-7844/com.example.caoweizhao.readerapp E/PDFView: load pdf error
                                                                     java.lang.OutOfMemoryError: Failed to allocate a 134209548 byte allocation with 16777216 free bytes and 108MB until OOM
                                                                         at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91)
                                                                         at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201)
                                                                         at com.github.barteksc.pdfviewer.util.Util.toByteArray(Util.java:37)
                                                                         at com.github.barteksc.pdfviewer.source.InputStreamSource.createDocument(InputStreamSource.java:37)
                                                                         at com.github.barteksc.pdfviewer.DecodingAsyncTask.doInBackground(DecodingAsyncTask.java:53)
                                                                         at com.github.barteksc.pdfviewer.DecodingAsyncTask.doInBackground(DecodingAsyncTask.java:25)
                                                                         at android.os.AsyncTask$2.call(AsyncTask.java:295)
                                                                         at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                         at java.lang.Thread.run(Thread.java:818)

11

最佳答案

在你的AndroidManifest.xml文件中,在application标签中添加android:largeHeap="true"

关于android - 加载大 PDF 时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47532302/

相关文章:

java - Apache ActiveMQ 中的内存泄漏

vba - 命名图表时出现内存不足错误

android - 无法让 HREF 在 Android strings.xml 中工作

android - 在 Facebook 上共享出现异常 android.webkit.WebView.onWindowFocusChanged

android - 如何更改顶部的应用程序名称

javascript - 为什么有些 pdf 链接会下载文件,而其他链接只会显示该文件?

C# PDF 控件和库

android - 在运行时更新启动器图标

javascript - 使用 "Run as"运行 Internet Explorer 无法打开新的 PDF 窗口

node.js\为什么我会收到 RangeError : Maximum call stack size exceeded