handler主要用法有两各
- 在新启动的线程中发送消息
- 在主线程中获取 处理消息
Android的消息传递机制是另一种形式的"事件处理" 这种机制主要是为了处理android的多线程问题——android只允许UI线程(当一个程序第一次启动时创建Main线程)修改activity中的UI组件 这样会导致新启动的线程无法动态改变界面组件的属性值。
如采用下图创建线程方式修改textview的值

会报如下错

注意:旧的API版本可以直接new Handler(MainActivity中 子线程不行) 在新版本中该使用方法被废弃了 需要重写一个类继承Handler 然后去使用自己写的handler 如果想在子线程里new一个handler 需要先调用Looper.prepare() 再去创建 并且调用 Looper.loop();接收信息
new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
};
Looper.loop();
}
})
在实际android开发中 尤其时涉及动画的游戏开发 需要让新启动的线程周期性的改变界面组件的属性值 这就需要Handler的消息传递机制
如下修改即可
在此处修改textview

实现方法
- 延迟跳转 postDelayed方法 如图设置3s钟后跳转到另一个页面

- 线程间通信 通过重写handleMessage方法处理消息

- 使用hasMessages(int what)检查消息队列中是否包含what属性为指定值的消息
- 使用hasMessages(int what,Object object)检查消息队列中是否包含what属性为指定值且object属性为指定对象的消息
- 多个重载的Message obtainMessage():获取消息
- sendMessage(Message msg)立即发送消息(还有其他类似方法如发送空消息 指定多少毫秒后发送消息)
实例 自动播放动画
public ImageView mContentVideo = itemView.findViewById(R.id.im_video);
{
// onCreat或者其他处理数据的方法里
MyHandler handler = new MyHandler();
// 定义一个计时器 让该计时器周期性执行任务
new Timer().schedule(new TimerTask() {
@Override
public void run() {
// 发送空消息 0x:代表十六进制
handler.sendEmptyMessage(0x1233);
}
},0,3000);
}
class MyHandler extends Handler{
// 定义周期性显示的图片
int[] imageIds = {
R.drawable.im_v6,
R.drawable

本文详细介绍了Android中Handler的使用,包括其在新线程中发送消息、在主线程中处理消息的机制,以及如何解决线程间通信问题。Handler是Android消息传递的核心,用于处理UI线程更新和定时任务,例如实现动画的自动播放和实时更新进度条。文中通过实例展示了如何创建Handler、发送消息、检查消息队列以及重写handleMessage方法来处理消息。同时,解释了Looper、MessageQueue和Message在Handler机制中的角色和工作原理。
最低0.47元/天 解锁文章
3350

被折叠的 条评论
为什么被折叠?



