我有一个要在 ImageView 中显示的 PDF。它在 API 24-28 上显示,但在 API 29 上没有显示图像。我认为问题可能是 PDFRenderer 创建的位图。
我在 .render
后面放了一个断点方法并(在调试器中)在此处单击“查看位图”:
在 API 29 上,有时会得到图像,有时会出现以下错误:
Error while evaluating expression, Object has been collected
在 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/