FATAL EXCEPTION: pool-3-thread-2
Process: com.example.my_app, PID: 11178
java.lang.IllegalStateException: cannot load page
at android.graphics.pdf.PdfRenderer.nativeOpenPageAndGetSize(Native Method)
at android.graphics.pdf.PdfRenderer.-$$Nest$smnativeOpenPageAndGetSize(Unknown Source:0)
at android.graphics.pdf.PdfRenderer$Page.(PdfRenderer.java:315)
at android.graphics.pdf.PdfRenderer$Page.(Unknown Source:0)
at android.graphics.pdf.PdfRenderer.openPage(PdfRenderer.java:233)
at com.example.my_app.LoadedDocument.renderPage(LoadedDocument.kt:353)
95 % времени мое приложение работает нормально; исключение выдается только в том случае, если я нажимаю на экран, чтобы быстро просмотреть 20-30 страниц за короткий период времени. Сначала я подумал, что, возможно, использую слишком много памяти, но я освобождаю ранее загруженную страницу, и, как показывает приведенный ниже профилировщик, я не использую даже 1 ГБ памяти, поэтому я не верю, что это так.

Вот как я использую этот метод:
private fun renderAndSavePage(pageNumber: Int) {
pagesSemaphore.acquire()
// Exit early if a previous call rendered this page.
if (pages[pageNumber].width != EMPTY_BITMAP_WIDTH) {
pagesSemaphore.release()
return
}
// If, in the time between this function call and acquiring the semaphore,
// the user has quickly switched pages beyond where this needs to be loaded,
// skip loading this.
if (abs(pageNumber - metadata.pageNo) > PAGE_BUFFER) {
pagesSemaphore.release()
return
}
// Open the page and save it to a bitmap.
val page = renderer.openPage(pageNumber)
val ratio = page.height.toFloat() / page.width.toFloat()
val bitmap = Bitmap.createBitmap(
imagePixelWidth,
(imagePixelWidth * ratio).toInt(),
Bitmap.Config.ARGB_8888
)
bitmap.eraseColor(Color.WHITE)
page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY)
pages[pageNumber] = bitmap
page.close()
pagesSemaphore.release()
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... eexception