Back

android - http 加载图片 (深刻理解安卓中的多线程) imageview

发布时间: 2017-09-01 05:39:00


 https://android-developers.googleblog.com/2009/05/painless-threading.html 把android中的post, handler 等等讲的非常透彻

这里也是一个很著名的问答:  https://stackoverflow.com/questions/6343166/how-do-i-fix-android-os-networkonmainthreadexception

也就是说,如果要异步加载图片的话,就这样:

        // 创建一个新的线程(从UI线程分离)
        new Thread(new Runnable() {
            @Override
            public void run() {
                try{
                    String url = item.getImage_url();
                    Log.d(TAG, "== imageUrl: " + url);
                    InputStream inputStream = (InputStream) new URL(url).getContent();
                    final Drawable drawable = Drawable.createFromStream(inputStream, "src name");
       // 该线程的结果,再返回,操作UI线程
                    holder.ivIcon.post(new Runnable() {
                        @Override
                        public void run() {
                            holder.ivIcon.setImageDrawable(drawable);
                        }
                    });
                }catch (Exception e){
                    e.printStackTrace();
                }

            }
        }).start();

没办法,从android 4.0 开始就是这样的。

所以,如果要async的方式加载图片的话,建议使用这个库:https://github.com/nostra13/Android-Universal-Image-Loader

Back