近段时间有一个需求:在线获取图片并且显示在界面上。因为在线获取图片必定会有延迟,如果在主线程中获取会有很大几率造成主线程阻塞。解决的办法是开辟子线程进行网络访问。新的问题又出现了:android的UI更新必须在主线程中完成。但是子线程的值脱离线程会无效,造成java.lang.NullPointerException。所以思考了一下决定用android自带的异步处理机制:Handler,进行消息的回调。

       首先是线程的开辟。

private void downloadImage() {        new Thread(new Runnable() {            @Override            public void run() {                final Bitmap bitmap= ServerImage.downloadFile();     //在线获取图片                Looper.prepare();                Message message=new Message();                message.what=0;                message.obj=bitmap;                handler.sendMessage(message);                Looper.loop();            }        }).start();    }

         其次是自定义Handler。

class ImageHandler extends Handler{        @Override        public void handleMessage(Message msg){            //编写自定义逻辑            switch (msg.what){                case 0:{                                    }            }        }    }

        其中switch中的case与调用handler时定义的msg.what要严格一致。

        最后是handler对象的定义。

        定义的时候注意一点:要在子线程外定义。我尝试过在子线程内定义,结果在把handler里面得到的图片赋值给UI组件时发生java.lang.NullPointerException。不清楚什么原因,但是确实挺有趣的,有时间会探求一下里面的原理。

更多相关文章

  1. 实例+详解剖析Android之自定义View
  2. Android 单线程模型详解及实例
  3. Android中使用Thread+Handler实现非UI线程更新UI界面
  4. 自定义android用户控件,使用回调函数实现自定义事件
  5. Android–多线程之Handler下载图片源码
  6. android新闻项目、饮食助手、下拉刷新、自定义View进度条、React

随机推荐

  1. android中opengl es基本方法使用说明
  2. Android(安卓)文件操作
  3. android中操作SQLite常见错误
  4. android canmera相机
  5. windows下搭建cocos2dx Android开发环境
  6. Android(安卓)TimeLine 时间节点轴的实现
  7. android 处理图片的工具类
  8. Android(安卓)全面屏的和有导航栏的判断
  9. Android的NDK开发(5)————Android(安
  10. Android(安卓)DOC文档分析——Dialog