Android Handler

作者: 皮皮铭 | 来源:发表于2019-07-18 21:48 被阅读0次

Hander机制,将子线程需要更新UI操作信息传递到主线程,从而实现UI更新。

基本写法:

```

Handlerhandler =new Handler(){

@Override

    public void handleMessage(Message msg) {

super.handleMessage(msg);

        Log.e(TAG, "handleMessage: "+msg.obj.toString() );

    }

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    new Thread(new Runnable() {

@Override

        public void run() {

Message message =new Message();

            message.obj ="123456";

            handler.sendMessage(message);

        }

}).start();

}

```

Handler原理:

1.Looper 轮询器

2.MessageQuere 消息队列

3.Handler 

4.message 消息

收消息,首先看Looper

prepare()方法

在子线程要自己调用prepare()方法,否则会报错,还要调用loop()方法来轮询MessageQuere,而在主线程Looper是自动创建的,如果你在主线程再创建会抛异常。

判断有没有Looper 实例,有则抛异常,没有则执行new Looper

然后创建一个MessageQueue 

所以说一个线程只能有一个Loper和一个MessageQueue,

loop()不断的从消息队列里取消息

target就是handle,

就实现HandleMessage

然后看怎么发消息

最终都会调用sendMessageAtTime(),  参数uptimeMillis就是开机到现在的时间加上延迟的时间,

sendMessage()延迟时间就为0,

通过next属性形成一条单链,按照when时间来排序,大的往后放。

相关文章

网友评论

    本文标题:Android Handler

    本文链接:https://www.haomeiwen.com/subject/cuhdhctx.html