如何通过网络加载多个图片到ImageView并提升性能

huangapple go评论90阅读模式
英文:

How to boost to load multiple images from web to ImageViews

问题

以下是您要求的翻译内容:

要从网站加载多个图像,编写了以下代码。

  1. public void connectImgtoView(final int max) {
  2. new Thread(new Runnable() {
  3. @Override
  4. public void run() {
  5. URL url = null;
  6. for (int i = 0; i < max; i++) {
  7. try {
  8. url = new URL(postImgUrl.get(i));
  9. } catch (MalformedURLException e) {
  10. e.printStackTrace();
  11. }
  12. try {
  13. final BufferedInputStream bufferedInputStream
  14. = new BufferedInputStream(url.openStream());
  15. Bitmap bitmap = BitmapFactory.decodeStream(bufferedInputStream);
  16. bufferedInputStream.close();
  17. final Bitmap scaledBitmap = Bitmap.createScaledBitmap(
  18. bitmap,
  19. (int) (992),
  20. (int) (1403),
  21. true
  22. );
  23. final int finalI = i;
  24. runOnUiThread(new Runnable() {
  25. @Override
  26. public void run() {
  27. postImg[finalI].setImageBitmap(scaledBitmap);
  28. }
  29. });
  30. } catch (IOException e) {
  31. e.printStackTrace();
  32. }
  33. }
  34. progressOFF();
  35. }
  36. }).start();
  37. }

尽管这种方法执行成功,但存在性能速度过慢的问题。

因此,我想知道有什么方法比这个更快。

请帮忙。

变量说明

postImgUrl:类型为 ArrayList,这是我想要的图像的 URL。

postImg:类型为 ImageView 数组,这是布局中存在的 ImageView。

英文:

To load several images from a website, the following code was written.

  1. public void connectImgtoView(final int max) {
  2. new Thread(new Runnable() {
  3. @Override
  4. public void run() {
  5. URL url = null;
  6. for (int i = 0; i &lt; max; i++) {
  7. try {
  8. url = new URL(postImgUrl.get(i));
  9. } catch (MalformedURLException e) {
  10. e.printStackTrace();
  11. }
  12. try {
  13. final BufferedInputStream bufferedInputStream
  14. = new BufferedInputStream(url.openStream());
  15. Bitmap bitmap = BitmapFactory.decodeStream(bufferedInputStream);
  16. bufferedInputStream.close();
  17. final Bitmap scaledBitmap = Bitmap.createScaledBitmap(
  18. bitmap,
  19. (int) (992),
  20. (int) (1403),
  21. true
  22. );
  23. final int finalI = i;
  24. runOnUiThread(new Runnable() {
  25. @Override
  26. public void run() {
  27. postImg[finalI].setImageBitmap(scaledBitmap);
  28. }
  29. });
  30. } catch (IOException e) {
  31. e.printStackTrace();
  32. }
  33. }
  34. progressOFF();
  35. }
  36. }).start();
  37. }

Although this method is performed successfully, there is a problem that the performance speed is too slow.

So I want to know what is faster than this method.

Please help me.

Variable description

postImgUrl : type is ArrayList<String>, this is url that has image i want

postImg : type is ImageView Array, this is ImageView that exists in the layout.

答案1

得分: 1

尝试将for循环放在Thread之外,以便可以同时实例化和处理多个Thread

  1. public void connectImgtoView(final int max) {
  2. for (int i = 0; i < max; i++) {
  3. new Thread(new Runnable() {
  4. @Override
  5. public void run() {
  6. URL url = null;
  7. try {
  8. url = new URL(postImgUrl.get(i));
  9. } catch (MalformedURLException e) {
  10. e.printStackTrace();
  11. }
  12. try {
  13. final BufferedInputStream bufferedInputStream
  14. = new BufferedInputStream(url.openStream());
  15. Bitmap bitmap = BitmapFactory.decodeStream(bufferedInputStream);
  16. bufferedInputStream.close();
  17. final Bitmap scaledBitmap = Bitmap.createScaledBitmap(
  18. bitmap,
  19. (int) (992),
  20. (int) (1403),
  21. true
  22. );
  23. final int finalI = i;
  24. runOnUiThread(new Runnable() {
  25. @Override
  26. public void run() {
  27. postImg[finalI].setImageBitmap(scaledBitmap);
  28. }
  29. });
  30. } catch (IOException e) {
  31. e.printStackTrace();
  32. }
  33. progressOFF();
  34. }
  35. }).start();
  36. }
  37. }
英文:

Try placing the for loop out side of Thread so that you can instantiate and work multiple Threads simultaneously.

  1. public void connectImgtoView(final int max) {
  2. for (int i = 0; i &lt; max; i++) {
  3. new Thread(new Runnable() {
  4. @Override
  5. public void run() {
  6. URL url = null;
  7. try {
  8. url = new URL(postImgUrl.get(i));
  9. } catch (MalformedURLException e) {
  10. e.printStackTrace();
  11. }
  12. try {
  13. final BufferedInputStream bufferedInputStream
  14. = new BufferedInputStream(url.openStream());
  15. Bitmap bitmap = BitmapFactory.decodeStream(bufferedInputStream);
  16. bufferedInputStream.close();
  17. final Bitmap scaledBitmap = Bitmap.createScaledBitmap(
  18. bitmap,
  19. (int) (992),
  20. (int) (1403),
  21. true
  22. );
  23. final int finalI = i;
  24. runOnUiThread(new Runnable() {
  25. @Override
  26. public void run() {
  27. postImg[finalI].setImageBitmap(scaledBitmap);
  28. }
  29. });
  30. } catch (IOException e) {
  31. e.printStackTrace();
  32. }
  33. progressOFF();
  34. }
  35. }).start();
  36. }
  37. }

huangapple
  • 本文由 发表于 2020年5月2日 14:39:09
  • 转载请务必保留本文链接:https://go.coder-hub.com/61555441.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定