【问题标题】:How to fix OutOfMemoryError in RecylerView with jpg images [duplicate]如何使用 jpg 图像修复 RecyclerView 中的 OutOfMemoryError [重复]
【发布时间】:2020-05-02 21:46:03
【问题描述】:

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

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

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

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

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

我尝试通过仅为 RecyclerView 的可见部分加载图像来做某种解决方法,但这需要很多曲折,最终没有奏效。

有没有办法加载大量图像并确保它们不会在 RAM 中占用太多空间。我正在使用一部旧手机,我希望我的应用可以在它上面运行。这是 Galaxy Ace II。

【问题讨论】:

标签: java android android-recyclerview jpeg


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    感谢您的回答。 我最终做了以下事情:

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

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

    【讨论】:

    • 您可以将缩放位图的创建放在后台线程中。或者,正如其他人建议的那样,使用 glide 或 picasso 之类的库。
    【解决方案3】:

    为什么强烈推荐使用 Glide 或 Picasso 在应用中处理图像。

    1- 实现 Glide https://github.com/bumptech/glide(我更喜欢)

    2- 实现毕加索https://square.github.io/picasso/#download(也是一个强大的库)

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

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

    https://stackoverflow.com/a/58358334/11982611这个帖子可以帮助解决这个问题。

    实施后,使用 Glide 调整大小

    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 );
    
    • 无论您使用什么,都应根据移动设备调整图像

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-30
      • 2011-10-22
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      • 2015-06-24
      • 1970-01-01
      • 2013-05-16
      相关资源
      最近更新 更多