内容简介:近段时间有一个需求:在线获取图片并且显示在界面上。因为在线获取图片必定会有延迟,如果在主线程中获取会有很大几率造成主线程阻塞。解决的办法是开辟子线程进行网络访问。新的问题又出现了:android的UI更新必须在主线程中完成。但是子线程的值脱离线程会无效,造成java.lang.NullPointerException。所以思考了一下决定用android自带的异步处理机制:Handler,进行消息的回调。其中switch中的case与调用handler时定义的msg.what要严格一致。定义的时候注意一点:要
近段时间有一个需求:在线获取图片并且显示在界面上。因为在线获取图片必定会有延迟,如果在主线程中获取会有很大几率造成主线程阻塞。解决的办法是开辟子线程进行网络访问。新的问题又出现了: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。不清楚什么原因,但是确实挺有趣的,有时间会探求一下里面的原理。
以上所述就是小编给大家介绍的《Android利用Handler异步获取子线程中的产生的值》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- JStorm 源码分析 - 异步循环线程 AsyncLoopThread
- 多线程 – 单元测试异步方法的最好方法是什么?
- JS核心知识点梳理——异步,单线程,运行机制
- WPF 多线程 UI:设计一个异步加载 UI 的容器
- java – Tomcat连接器架构,线程池和异步servlet
- .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Design systems
Not all design systems are equally effective. Some can generate coherent user experiences, others produce confusing patchwork designs. Some inspire teams to contribute to them, others are neglected. S......一起来看看 《Design systems》 这本书的介绍吧!