handler机制及使用场景

1.handler是什么?

是android提供用于更新ui的一套机制,也是处理消息的机制

作用:

a.新启动的线程中发送消息

b.主线程中获取,处理消息

2.为什么要使用handler?

答:android在设计的时候,封装了一套消息创建,传递,处理机制,如果不遵循这套机制就不能更新ui,会抛出异常信息(不能在非线程中更新ui)

 

 

 

2.handler机制

handler机制也叫做异步消息机制,主要由四部分组成

a.Message

Message用于线程间传递消息,可携带少量信息,用于不同线程间交换数据。Meaasge的arg1和arg2可携带int数据,使用obj可携带Object数据

b.Handler

子线程中调用sendMessage方法发送Message对象,当消息发送到handler的handleMessage方法中时,Message对象被处理

 

c.MessageQueue

用于存放handler发送过来的消息,每个线程只有一个消息队列,该队列只存放Message对象

d.Looper

Looper是每个线程中MessageQueue的管家,调用Looper.loop()后就会进入一个无限循环中,循环检查是有消息,如果有消息,则循环取出MessageQueue中的每一条消息,并传递到handler的handleMessage方法中。每个线程中只有一个Looper对象

 

2.使用场景

涉及到耗时操作的情况,如联网操作,文件上传下载操作

3.用法

1.主线程中创建handler对象,并重写handleMessage方法

2.创建子线程,涉及子线程需要更新ui操作,创建Messae对象,并携带数据,调用handler的sendMessage方法发送Message对象,随后这个对象会被存放在MessageQueue中等待被处理,由MessageQueue的管家Looper循环取出消息,通过回调DisPatchMessage方法将消息传递给handler的handleMessage方法,最终传递的消息会被Looper从MessageQueue中取出传递给handleMessage方法,最终得到处理

 

 

 

子线程中使用handler接收消息,需要创建Looper

1.Looper.prepare()     创建Looper实例

2.创建handler对象,实现handleMessage方法,取出消息队列中的消息

3.Looper.looper()  循环取出消息

 

 

handler的三种使用场景

https://blog.csdn.net/u013718120/article/details/51945490?utm_source=app

 

你可能感兴趣的:(handler机制及使用场景)