Android 更改ImageView的背景很慢

Android 更改ImageView的背景很慢,android,performance,android-layout,Android,Performance,Android Layout,我正在创建一个应用程序,每次显示新报价时,我都会更改背景图像。 我使用的是ImageView,这些图片都是jpg文件。它们存储在xxhdpi下的mipmap文件夹中,因为图像对于可绘制文件夹来说太大了 但是,当我使用以下方法设置新的ImageView时: background.setBackgroundResource(backgrounds.get(counter)); 将显示新图片,但它有半秒的延迟。这不是很酷,我只是想让新的画面流畅 我不认为张贴整个代码是有用的。最重要的部分是: 引用存

我正在创建一个应用程序,每次显示新报价时,我都会更改背景图像。 我使用的是ImageView,这些图片都是jpg文件。它们存储在xxhdpi下的mipmap文件夹中,因为图像对于可绘制文件夹来说太大了

但是,当我使用以下方法设置新的ImageView时:

background.setBackgroundResource(backgrounds.get(counter));
将显示新图片,但它有半秒的延迟。这不是很酷,我只是想让新的画面流畅

我不认为张贴整个代码是有用的。最重要的部分是:

引用存储在ArrayList中,如下所示:

ArrayList<Integer> backgrounds;
backgrounds = new ArrayList<>();
backgrounds.add((Integer) R.mipmap.background1);
backgrounds.add((Integer) R.mipmap.background2);
backgrounds.add((Integer) R.mipmap.background3);
backgrounds.add((Integer) R.mipmap.background4);
ArrayList背景;
在onCreate()之后,我会像这样填写列表:

ArrayList<Integer> backgrounds;
backgrounds = new ArrayList<>();
backgrounds.add((Integer) R.mipmap.background1);
backgrounds.add((Integer) R.mipmap.background2);
backgrounds.add((Integer) R.mipmap.background3);
backgrounds.add((Integer) R.mipmap.background4);
backgrounds=newarraylist();
添加((整数)R.mipmap.background1);
添加((整数)R.mipmap.background2);
添加((整数)R.mipmap.background3);
添加((整数)R.mipmap.background4);
这些图片的大小介于100KB和7MB之间

谁能告诉我为什么加载速度慢以及如何改进它?另外,将它们放在xxhdpi文件夹的mipmap下是否正确


谢谢你的回答

在你的问题下有一些有效的评论,但我将添加我的评论作为回答:)

  • 减少图像大小是至关重要的-使用JPG而不是PNG和降低分辨率将为您节省一些时间和设备电池
  • 尝试将这些图像放在
    drawable nodpi
    文件夹下-这样可以避免不必要的图像缩放。我假设你的应用程序中只有一个后台实例

  • 对于提高背景设置速度,您没有什么可做的,尤其是当图像已经在APK中烘焙时。

    它现在工作正常。这些图像太大了,我把它们的大小从2-3MB缩小到了~25KB。它们看起来仍然很好,并且可以正常加载。

    7MB jpeg必须具有很高的分辨率。1920x1080对于所有设备来说都足够了,您不需要4K。您可以提供多个分辨率,并首先加载较小的分辨率,然后在加载完成后显示较大的分辨率。延迟很可能是由于图像被加载到内存中。不过,我建议你使用一个像Glide或Picasso这样的库,它可以为你处理这些问题。我现在使用的是Picasso,图像已经是jpg了。我将它们全部放在drawable/nodpi中,但结果相同。不过,谢谢你