gpt4 book ai didi

android - 应用程序在 android 中显示图像很慢

转载 作者:太空宇宙 更新时间:2023-11-03 12:01:11 24 4
gpt4 key购买 nike

我正在做一个图像应用程序以在 GridView 中显示它们,我正在从服务器获取 20 张图像。每个图像的分辨率是 720*540。我使用 JSON 解析来获取 url 并使用下面的代码将其转换为位图以设置图像。

public static Bitmap loadImageFromUrl(String url) {
InputStream inputStream;Bitmap b;
try {
inputStream = (InputStream) new URL(url).getContent();
BitmapFactory.Options bpo= new BitmapFactory.Options();
if(bpo.outWidth>500) {
bpo.inSampleSize=8;
b=BitmapFactory.decodeStream(inputStream, null,bpo );
} else {
bpo.inSampleSize=2;
b=BitmapFactory.decodeStream(inputStream, null,bpo );
}
return b;
} catch (IOException e) {
throw new RuntimeException(e);
}
}

我的应用程序运行良好,但加载图像花费了太多时间。这样我的应用程序就变慢了。我应该降低图像的分辨率吗?

如何走出困境?

最佳答案

如果你正在做一个 GridView 来加载 20 张这种分辨率的图像,我建议如下:

  1. 绝对减小图像的大小。除非你的目标是平板电脑,否则你会没事的,因为大多数智能手机无法达到 20 张图像的分辨率。

  2. 如果可以,缓存图像。

  3. 在不同的线程上下载图像。存储一个 HashMap 对你来说很容易,只需将所有带有图像文件名或其他形式的 ID 作为键的 ImageView 。下载图像时向您的处理程序发送消息,并在解码后更新 View 。您可以直接检索您的 View 。请记住检查它们是否仍在窗口中。这样一来,图像就会一个接一个地快速显示出来。我不认为多线程图像会有帮助,只需确保使用另一个线程来“推送图像”和主 UI 线程更新。届时用户体验将得到极大提升。

希望这对您有所帮助。

---一些实现,我现在没有完整的代码---

有一个数据结构来匹配 View 和进来的数据。在这里非常方便。

private HashMap<String,ImageView> pictures;

当您获得图像 url 列表时,遍历它们:

 pictures.put(id,view);
try{
FileInputStream in = openFileInput(id);
Bitmap bitmap = null;
bitmap = BitmapFactory.decodeStream(in, null, null);
view.setImageBitmap(bitmap);
}catch(Exception e){
new Thread(new PictureGetter(this,mHandler,id)).start();
}

(这里的图片 getter 将简单地获取图像,如果它还没有被缓存并缓存它)

更新 ImageView 的代码:

 if(id!=null){
ImageView iv = pictures.get(id);
if(iv!=null){
try{
FileInputStream in = openFileInput(id);
Bitmap bitmap = null;
bitmap = BitmapFactory.decodeStream(in, null, null);
iv.setImageBitmap(bitmap);
}catch(Exception e){
}
}

关于android - 应用程序在 android 中显示图像很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6991865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com