ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

应用程序在Android中的图像很慢

2019-07-23 18:27:36  阅读:222  来源: 互联网

标签:android android-image


我在图像上做一个应用程序,以在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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有