安卓消息通信机制概述Handle+Message

Android的消息机制:

在Android中我们通常把UI页面所在的线程叫做主线程,如果主线程执行某一项耗时操作超过5秒钟,
程序将会报ANR(Application Not Responding)错误。但是开发者不可避免会进行耗时操作,
比如加载网络图片,加载网络数据,读写大文件等等,此时我们通常会将耗时操作放在子线程中执行,
子线程执行完成后将数据或者结果发送给主线程。
这个时候就用到了Android的消息机制,即android间的通信。

① 消息队列(Message Queue)
Android应用程序每启动一个线程,都为其创建一个消息队列,然后进入到一个无限循环之中。
然后不断检查队列中是否有新消息需要处理。如果没有,线程就会进入睡眠状态,反之会对消息进行分发处理。
② 消息机制核心类
android的消息处理有三个核心类:
Looper,Handler和Message。
(Message Queue(消息队列)被封装到Looper里面了,我们不会直接与Message Queue打交道,因此没将其作为核心类)
消息(Message):存放在消息队列中,被Looper循环取出执行,消息可以携带数据,并指定操作
Handler:可以往消息队列(MessageQueue)中存放消息
Looper:无限循环地从消息队列中获取消息并执行

Message类 :
                android.os.Message的主要功能是进行消息的封装,并且同时可以指定消息的操作形式。
                        变量或方法                   类型  描述
                        *public int what            变量  用于定义此Message属于何种操作
                        *public Object obj          变量  用于定义此Message传递的信息数据
                        public int arg1             变量  传递一些整型数据时使用,一般很少使用
                        public int arg2             变量  传递一些整型数据时使用,一般很少使用
                        public Handler getTarget()  普通  取得操作此消息的Handler对象
Handler类常用方法:
Message对象封装了所有的消息,而这些消息的操作就需要android.os.Handler类完成

方法 类型 描述
public Handler() 构造 创建一个新的Handler实例
public Handler(Looper looper) 构造 使用指定的队列创建一个新的Handler实例
public final Message obtainMessage(int what, Object obj) 普通 获得一个Message对象
public final Message obtainMessage(int what, int arg1, int arg2, Object obj) 普通 获得一个Message对象
public void handleMessage(Message msg) 普通 处理消息的方法,子类要覆写此方法
public final boolean hasMessages(int what) 普通 判断是否有指定的Message
public final boolean hasMessages(int what, Object object) 普通 判断是否有指定的Message
public final void removeMessages(int what) 普通 删除掉指定的Message
public final void removeMessages(int what, Object object) 普通 删除掉指定的Message
public final boolean sendEmptyMessage(int what) 普通 发送一个空消息
public final boolean sendEmptyMessageAtTime(int what, long uptimeMillis) 普通 在指定的日期时间发送消息
public final boolean sendEmptyMessageDelayed(int what, long delayMillis) 普通 等待指定的时间之后发送消息
public final boolean sendMessage(Message msg) 普通 发送消息

重点内容 使用Handle和Message的原因:
①。Handle可以处理耗时任务操作,而主线程不能进行耗时操作
②。子线程不能控制主线程操作数据,Message对象封装了所有消息,需要handle完成发送

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值