编程语言
首页 > 编程语言> > 应用程序在Android中的图像很慢

应用程序在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