Java 如何使用jpg图像修复RecylerView中的OutOfMemoryError

Java 如何使用jpg图像修复RecylerView中的OutOfMemoryError,java,android,android-recyclerview,jpeg,Java,Android,Android Recyclerview,Jpeg,我在android应用程序中有一个RecyclerView。我正在做某种文件浏览器 当我将自己的设备插入计算机时,当我到达DCIM文件夹中的Camera文件夹时,它的内存就会耗尽 这是因为那里有很多图片,我试图将它们显示为ImageView,而不是通常的可绘制文件图标 加载图像时,应用程序空间不足,因此会崩溃 我使用RecyclerView实现该应用程序,认为它将回收视图,而不会耗尽内存或延迟。但它似乎不起作用 我试着做一些变通,只为RecyclerView的可见部分加载图像,但这需要很多扭曲,

我在android应用程序中有一个RecyclerView。我正在做某种文件浏览器

当我将自己的设备插入计算机时,当我到达DCIM文件夹中的Camera文件夹时,它的内存就会耗尽

这是因为那里有很多图片,我试图将它们显示为ImageView,而不是通常的可绘制文件图标

加载图像时,应用程序空间不足,因此会崩溃

我使用RecyclerView实现该应用程序,认为它将回收视图,而不会耗尽内存或延迟。但它似乎不起作用

我试着做一些变通,只为RecyclerView的可见部分加载图像,但这需要很多扭曲,最终没有成功

是否有办法加载大量图像,并确保它们不会占用RAM中太多空间。我使用的是一部旧手机,我希望我的应用程序能在上面运行。这是一个银河Ace II。

使用glide
在您的依赖项中添加
com.github.bumptech.glide:glide:4.10.0

谢谢您的回答。 我最后做了以下几件事:

Bitmap bitmap = BitmapFactory.decodeFile(filePath);
bitmap = Bitmap.createScaledBitmap(bitmap, 50, 50, false);
imageView.setImageBitmap(bitmap);

即使是50x50像素,它仍然非常滞后。我可以试试GLIDE library。

为什么强烈建议使用GLIDE或毕加索在应用程序中处理图像

1-实现滑动(我更喜欢)

2-实现毕加索(也是一个强大的库)

他们专业地处理图像。他们有工具来避免图像引起的OOM。您应该按照教程来实现和使用它们

但OOM不仅仅是因为图像。必须遵守整个应用程序

这篇文章可以帮上忙

实施后,使用滑动调整大小

Glide.with(mCtxt).load( image uri or url or drawable )
                     .error( image when error occurs )
                .override(320,180) // overrided width and height
                .centerCrop()
                .into(  imageview );
  • 无论您在使用什么,都应该根据移动设备调整图像

您是否使用任何库来显示图像或自己处理图像?我只是使用以下行:Drawable Drawable=Drawable.createFromPath(pathToImage)我猜图像相当大,因此您应该在将其加载到ImageView之前对其进行收缩。您可以使用Glide、毕加索或UniversalImageLoader等库为您缩小图像。请参见:这是否回答了您的问题?您可以将缩放位图的创建置于背景线程中。或者,正如其他人所建议的,使用像glide或毕加索这样的图书馆。