应用程序在Android中的图像很慢
作者:互联网
我在图像上做一个应用程序,以在GridView中显示它们,我从服务器获取20个图像.每个图像的分辨率为720 * 540.I使用JSON解析来获取url并使用下面的代码转换为Bitmap以设置图像.
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);
}
}
我的应用程序工作正常,但加载图像需要花费太多时间.所以我的应用程序变得缓慢.我应该降低图像的分辨率吗?
如何摆脱这个问题?
解决方法:
如果您正在进行网格视图以加载此类分辨率的20张图像,我建议如下:
>绝对减小图像的大小.除非您的目标是平板电脑,否则您将会很好,因为大多数智能手机无法通过20张图像实现该分辨率.
>如果可以,请缓存图像.
>在不同的主题上下载图像.存储HashMap会让您轻松,只需将所有图像视图与图像文件名或其他形式的ID一起作为键.下载图像时向处理程序发送消息,并在解码后更新视图.您可以直接检索您的视图.只记得检查它们是否仍在窗口中.这样,图像将一个接一个地快速显示出来.我不认为多线程图像会有所帮助,只需确保使用另一个线程“推送图像”和主UI线程更新.用户体验将大大改善.
希望这可以帮助.
—一些实现,我现在没有完整的代码 –
有一个数据结构来匹配视图与进来的数据.这里非常方便.
private HashMap<String,ImageView> pictures;
当您获得图像网址列表时,请遍历它们:
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();
}
(这里图片获取器只是获取图像,如果它没有被缓存并缓存它)
用于更新图像视图的代码:
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-image 来源: https://codeday.me/bug/20190723/1515429.html