Android Handler

Handler可以将子线程的操作运送到主线程或反向

1.子线程发送数据到主线程

Message message = handler.obainMessage();    //    Message message = Message.obtain();

message.obj = content;    //obj可以放任何类型,可放Bundle传多条数据;arg1、arg2、what为int

handler.sendMessage(message);

handler.sendMessageDelayed(message, 3000);

 

handler.sendEmptyMessage(what);

handler.sendEmptyMessage(1, 1000);

接收方即为实例化Handler的地方(应先将Handler对象实例化才能使用)

handler = new Handler(){

    @Override

    public void handleMessage(Message msg) {    //只有接收到数据才调用

        super.handleMessage(msg);

        String content = (String)msg.obj;

        tv.setText(content);

    }

}

2.主线程向子线程发送数据

//子线程

Looper.prepare();

handler = new Handler(){    ...    };

Looper.loop();

3.在handleMessage(...){}里调用

if(what!=-1) {

    handler.sendEmptyMessageDelayed(what, 1000);

}

实现自己给自己发消息,形成循环,但在这之前必须要发送一个消息触发该循环

4.

view.post(new Runnable(){    //view可以是任何控件或Handler对象

    @Override

    public void run() {    tv.setText(result);    }

});

5.封装工具类    HandlerNetUtils

a.

public class HandlerNetUtils{

    private static Handler handler = new Handler();

    public static void doNetwork(final String path, final DataCallback callback) {

        ...

        final byte[] bytes = baos.toByteArray();

        handler.post(new Runnable(){

            @Override

            public void run(){

                callback.doData(bytes);    //回调接口

            }

        });

    }

}

b.

public class HandlerNetUtils{

    public static void doNetwork(final String path, final Handler handler) {

        ...

        final byte[] bytes = baos.toByteArray();

        Message msg = Message.obtain();

        msg.obj = bytes;

        handler.sendMessage(msg);

    }

}

转载于:https://my.oschina.net/glfei/blog/3025895

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值