Android应用之网络加载图片实现方法
白羽 2018-06-04 来源 :网络 阅读 1025 评论 0

摘要:本文将带你了解Android网络加载图片实现方法,希望本文对大家学Android有所帮助。


 

自定义ImageLoader类,方便调用里面写的Thread或异步任务下载图片
LruCache使用了最近最少使用算法




   

public class ImageLoader {
    private ImageView mImageView;
    private String mUrl;
 
    //创建cache
    private LruCache<string,bitmap> mCaches;//需要缓存图像的名字
 
    public ImageLoader(){
        //获取最大可用内存
        int maxMerory=(int)Runtime.getRuntime().maxMemory();
        int cacheSize=maxMerory/4;
        //初始化mchache
        mCaches=new LruCache<string,bitmap>(cacheSize){
            @Override
            protected int sizeOf(String key, Bitmap value) {
               //加载正确的内存大小,不然默认返回元素的个数
                //在每次存入缓存的时候调用
                return value.getByteCount();
            }
        };
    }
    //增加到缓存
    public void addBitmapToCache(String url,Bitmap bitmap){
        if(getBitmapFromCache(url)==null){//校验缓存中是否存在
            mCaches.put(url,bitmap);
        }
 
    }
    //从缓存中获取数据
    public Bitmap getBitmapFromCache(String url){
     return mCaches.get(url);
    }
 
    private Handler mHandler=new Handler() {
        @Override
        public void handleMessage(Message msg){
            super.handleMessage(msg);
            if(mImageView.getTag().equals(mUrl))//避免缓存的图片对正确的图片产生影响
                mImageView.setImageBitmap((Bitmap) msg.obj);
        }
    };
 
    //使用Thread方法下载
    public void showImageByThread(ImageView ImageView, final String url){
        mImageView=ImageView;
        mUrl=url;
        new Thread(){
            public void run(){
                super.run();
                Bitmap bitmap=getBitmapFromUrl(url);
                Message message= Message.obtain();
                message.obj=bitmap;
                mHandler.sendMessage(message);
            }
 
        }.start();
    }

 

public Bitmap getBitmapFromUrl(String path){
        Bitmap bm=null;
        try{
            URL url=new URL(path);
            URLConnection connection=url.openConnection();
            connection.connect();
            InputStream inputStream=connection.getInputStream();
            bm= BitmapFactory.decodeStream(inputStream);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bm;
    }
 
    //使用异步任务下载
    public void showImageByAsyncTask(ImageView imageView,final String url){
        //判断缓存中是否存在该图片
        //从缓存中取出对应的图片
        Bitmap bitmap=getBitmapFromCache(url);
        //如果缓存中没有则去网上下载
 if(bitmap==null)
            new NewAsyncTask(imageView,url).execute(url);
        else
            imageView.setImageBitmap(bitmap);
        //new NewAsyncTask(imageView,url).execute(url);
    }
 
    private class NewAsyncTask extends AsyncTask<string,void,bitmap>{
 
        private ImageView mImageView;
        private String mUrl;
 
        public NewAsyncTask(ImageView imageView,String url) {
            mImageView=imageView;
            mUrl=url;
        }
 
        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            if(mImageView.getTag().equals(mUrl))
                mImageView.setImageBitmap(bitmap);
        }

 

 @Override
        protected Bitmap doInBackground(String... params) {
            //return getBitmapFromUrl(params[0]);//没有缓存机制的写法
            String url=params[0];
            //从网络获取图片
            Bitmap bitmap=getBitmapFromUrl(url);
            if(bitmap!=null)
                //将不在缓存的图片加入缓存
                addBitmapToCache(url,bitmap);
            return bitmap;
        }
    }
   }</string,void,bitmap></string,bitmap></string,bitmap>


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!

 


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程