Android 封装handler,Android 异步通信原理机制-- handler

handler因为可以异步通信的特别之处,在平时开发过程中使用比较多,根据自己平时的理解和记录,将整理的handler一些信息写出来,如果有理解不到之处,希望各位大神多多包涵,并指正。

1.handler是一个消息分发对象。

2,.handler的作用:完成Android中的线程通信(数据的异步加载显示,在子线程中完成耗时操作,在子线程中加载之后通知UI线程显示数据)

93183693a0e47bc30a769e36a3f9fe4c.png

3.AsyncTask和Handler的区别:

相同点:完成线程的通信,实现数据的异步加载

不同点:AsyncTask把通信涉及的所有的步骤已经全部封装好,只需要记住封装好的框架,在框架中填入对应代码即可。

如果使用Handler完成线程通信,那么所有涉及的步骤都需要自行创建。

当一个程序创建的时候,会为该程序创建一个线程,这个进程中创建一个主线程(UI线程),并运行一个消息队列(MessageQueue),这个消息队列管理应用程序中的最高级别的对象(四大组件)和这些对象所创建出来的窗口。

4.队列特点:先进先出

5.如何实现通信:

handler要在主线程中创建,完成之后,handler会和UI线程以及UI线程的MessageQueue关联,当通过handler在子线程中发送Message时,Message对象就会被发送到主线程的MessageQueue中。当主线程中的MessageQueue有新的Message进入队列时,监视这个MessageQueue的Looper就会将新进入队列的Message对象从队列中取出,传递给UI线程的Handler。

6.post方法:

在子线程中通过post方法发送一个Runnable对象,该对象会被添加到主线程队列的执行顺序中,主线程会调用Runnable中的run方法,实际上就是在子线程中给主线程添加一个操作

postDelayed方法:

在子线程中网主线程发送一个消息,该消息被主线程接收到之后,会延时执行

postAtme方法:

主线程会在指定的绝对时间点执行Runnable对象

7.send方法

a.sendEmptyMessage方法向主线程中发送一个空消息

b.sendMessage方法可向主线程发送int类型标记,或者已经封装的Message对象

c.sendMessageDelayed、sendMessageAtTIme这两个方法和post的两个方法作用类似

8.Message

arg1携带简单的一个整数

arg2携带简单的一个整数

what用户自定义的Message对象的编码

obj引用类型可以让Message对象携带引用类型的数据(字符串)

创建Message对象的时候,建议用Message.obtain()方法,不要直接new对象。

9.Looper

作用:监视消息队列,当发现消息队列中有新消息的时候,把该新消息取出传递给关联的Handler

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值