android - ImageView 未显示 PDFRenderer 在 Android API 29 上创建的位图中的图像

标签 android bitmap imageview pdfrenderer

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

我在 .render 后面放了一个断点方法并(在调试器中)在此处单击“查看位图”:
Click "View Bitmap

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

Error while evaluating expression, Object has been collected



Preview of bitmap

在 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();

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

最佳答案

我也在 API 30 上遇到了这个问题。看起来垃圾收集现在对于位图可能更具侵略性。我通过将问题位图的范围从私有(private)更改为公共(public)并在相关 View 被销毁时将其设置为 null 来解决此问题。

关于android - ImageView 未显示 PDFRenderer 在 Android API 29 上创建的位图中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59167434/

相关文章:

android - flutter 中的框架布局替代方案

android - 不可变位图崩溃错误

android - 无法在android中将矢量可绘制对象转换为位图可绘制对象

android - 位图 b= (位图) bundle.get ("data");困惑,机器人

android - 一种从 Android 应用程序追踪街道的方法?

升级 flutter 包后 Android 版本不再工作

android - 以编程方式在 framelayout 中的 imageview 上覆盖文本 - Android

android - picasso 无法在@override 上加载动画

android - 在 GridView 中混合 ImageView 和 VideoView

android - TransitionManager 手动进行