如何提升将多个图像从网络加载到 ImageViews
Posted
技术标签:
【中文标题】如何提升将多个图像从网络加载到 ImageViews【英文标题】:How to boost to load multiple images from web to ImageViews 【发布时间】:2020-08-16 16:59:17 【问题描述】:为了从网站加载多张图片,编写了以下代码。
public void connectImgtoView(final int max)
new Thread(new Runnable()
@Override
public void run()
URL url = null;
for (int i = 0; i < max; i++)
try
url = new URL(postImgUrl.get(i));
catch (MalformedURLException e)
e.printStackTrace();
try
final BufferedInputStream bufferedInputStream
= new BufferedInputStream(url.openStream());
Bitmap bitmap = BitmapFactory.decodeStream(bufferedInputStream);
bufferedInputStream.close();
final Bitmap scaledBitmap = Bitmap.createScaledBitmap(
bitmap,
(int) (992),
(int) (1403),
true
);
final int finalI = i;
runOnUiThread(new Runnable()
@Override
public void run()
postImg[finalI].setImageBitmap(scaledBitmap);
);
catch (IOException e)
e.printStackTrace();
progressOFF();
).start();
这种方法虽然执行成功,但存在执行速度太慢的问题。
所以我想知道什么比这个方法更快。
请帮帮我。
变量描述
postImgUrl :类型是 ArrayList,这是包含我想要的图像的 url
postImg : type 是 ImageView Array,这是布局中存在的 ImageView。
【问题讨论】:
【参考方案1】:尝试将 for 循环放在 Thread
的外侧,以便您可以同时实例化和处理多个 Threads
。
public void connectImgtoView(final int max)
for (int i = 0; i < max; i++)
new Thread(new Runnable()
@Override
public void run()
URL url = null;
try
url = new URL(postImgUrl.get(i));
catch (MalformedURLException e)
e.printStackTrace();
try
final BufferedInputStream bufferedInputStream
= new BufferedInputStream(url.openStream());
Bitmap bitmap = BitmapFactory.decodeStream(bufferedInputStream);
bufferedInputStream.close();
final Bitmap scaledBitmap = Bitmap.createScaledBitmap(
bitmap,
(int) (992),
(int) (1403),
true
);
final int finalI = i;
runOnUiThread(new Runnable()
@Override
public void run()
postImg[finalI].setImageBitmap(scaledBitmap);
);
catch (IOException e)
e.printStackTrace();
progressOFF();
).start();
【讨论】:
以上是关于如何提升将多个图像从网络加载到 ImageViews的主要内容,如果未能解决你的问题,请参考以下文章
Android:如何在不加载完整位图的情况下将流式图像即时渲染到 ImageView?
Android - 在显示进度时将图像从 URL 加载到 ImageView(不保存图像)
Android Lollipop 问题 - 无法将图像从相机加载到 ImageView
Android Glide 和 Firebase 存储:将连续图像从 Firebase 存储加载到 Imageview - 闪烁