PdfRenderer.openPage неожиданно выдает исключение java.lang.IllegalStateExceptionAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 PdfRenderer.openPage неожиданно выдает исключение java.lang.IllegalStateException

Сообщение Anonymous »

Согласно документации (https://developer.android.com/reference ... nPage(int)), IllegalStateException следует вызывать только в том случае, если PdfRenderer.close()< /code> вызывается перед попыткой открыть страницу, но я запустил отладчик и подтвердил, что средство визуализации не было закрыто до вызова openPage. Вот полная трассировка стека:
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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • PdfRenderer.openPage неожиданно выдает исключение java.lang.IllegalStateException
    Anonymous » » в форуме Android
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Java/JSP - сервер Minecraft неожиданно выдает случайную ошибку, IllegalStateException [закрыто]
    Anonymous » » в форуме JAVA
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • NavController.onGraphCreated выдает исключение java.lang.IllegalStateException
    Anonymous » » в форуме Android
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Как получить экземпляр pdfrenderer через uri в Jetpack Compose
    Anonymous » » в форуме Android
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • PDFrenderer - Как я могу отобрать несколько страниц PDF в веб -представление или ImageView?
    Anonymous » » в форуме Android
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»