ImageView 不显示来自 Android API 29 上 PDFRenderer 创建的位图的图像

mob*_*kie 5 android bitmap imageview pdfrenderer

我有一个要在 ImageView 中显示的 PDF。它在 API 24-28 上显示,但在 API 29 上没有显示图像。我认为问题可能是 PDFRenderer 创建的位图。

我在该.render方法之后放置了一个断点,并(在调试器中)在此处单击“查看位图”: 点击“查看位图

在 API 29 上,有时会得到图像,有时会出现以下错误:

评估表达式时出错,已收集对象

位图预览

在 API 24-28 上,我没有收到此错误。我总是得到图像。

下面是示例代码:

        File file = new File(getExternalFilesDir(null), "fileName.pdf");
        PdfRenderer renderer = new PdfRenderer(ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY));
        if (currentPage < 0) {
            currentPage = 0;
        } else if (currentPage > renderer.getPageCount()) {
            currentPage = renderer.getPageCount() - 1;
        }
        Bitmap bitmap = Bitmap.createBitmap(800, 1000, Bitmap.Config.ARGB_8888);
        Rect rect = new Rect(0, 0, 800, 1000);
        PdfRenderer.Page page = renderer.openPage(currentPage);
        page.render(bitmap, rect, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
        page.close();
        renderer.close();
        image.setImageBitmap(bitmap);
        image.invalidate();
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么图像总是显示在 API 24-28 上而不是 API 29 上?

小智 1

我在 API 30 上也遇到了这个问题。看起来对于位图来说,垃圾收集现在可能更加激进。我通过将问题位图的范围从私有更改为公共并在相关视图被销毁时将其设置为 null 解决了这个问题。