Android利用Handler异步获取子线程中的产生的值

栏目: Android · 发布时间: 7年前

内容简介:近段时间有一个需求:在线获取图片并且显示在界面上。因为在线获取图片必定会有延迟,如果在主线程中获取会有很大几率造成主线程阻塞。解决的办法是开辟子线程进行网络访问。新的问题又出现了: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异步获取子线程中的产生的值》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Introduction to Tornado

Introduction to Tornado

Michael Dory、Adam Parrish、Brendan Berg / O'Reilly Media / 2012-3-28 / USD 23.99

Tornado is a scalable, non-blocking web server and web application framework written in Python. It is also light-weight to deploy, fun to write for, and incredibly powerful. Tornado was written with p......一起来看看 《Introduction to Tornado》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换