Handler异步通信系统
2024-09-06 14:29:30
handler是Android给我们提供用来更新UI的一套机制,也是一套消息处理机制,我们可以发消息,也可以通过它处理消息。
Handler机制主要的几个角色:Handler,Message,Looper,MessageQueue(消息队列)
主线程在一开始就建立了如下系统:
如下图:子线程通过SendMessage方法将消息发生给主线程Hanlder系统,Handler系统通过handleMessage方法从消息队列中拿到消息,交给主线程。
实例:打地鼠游戏
1.创建handler
private Handler handler; //声明一个Handler对象
handler = new Handler(Looper.myLooper()){ //每个线程只有一个Looper,他负责管理MessageQueue,会不断的从MessageQueue取出消息,分发给handler
@Override
public void handleMessage(@NonNull Message msg) { //Handler系统接收来自子线程的消息
//需要处理的消息
int index; //获取地洞数组的行坐标
if(msg.what == 0x101){
index = msg.arg1;//获取位置索引值
mouse.setX(position[index][0]);
mouse.setY(position[index][1]);
mouse.setVisibility(View.VISIBLE);
}
super.handleMessage(msg); //发生给主线程
}
};
2.创建子线程
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
int index = 0;
while (!Thread.currentThread().isInterrupted()){
index = new Random().nextInt(position.length);//产生一个随机整数
Message msg = handler.obtainMessage(); //创建消息对象
msg.what = 0x101; // 设置消息标志
msg.arg1 = index; //保存地鼠位置的索引值
handler.sendMessage(msg); //子线程通过此方法将消息发生给Handler系统
try {
Thread.sleep(new Random().nextInt(500)+1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
thread.start();
3.效果图
完整代码:https://github.com/Xiang-MY/WhackAMole
最新文章
- UE4新手之编程指南
- Javascript中JSON对象的操作以及遍历key/value
- Oracle表解锁语句
- web service上传参数代码实例
- ActiveMQ的几种消息持久化机制
- 白话学习MVC(八)Action的执行二
- js里的匿名函数 数组排序
- C++ Code_Slider
- NodeJS + Socket.io聊天服务器连接数达到1024后就连不上了
- php 半角与全角相关的正则
- pyqt4制作透明无边框窗体
- hdu4393 Throw nails(只用模拟前面500来次,后面根据速度、位置、id值排序即可)
- LED发光二极管
- Arch: Configurations
- Java表达式中的那些坑
- Excel表科学记数法的数字和文本的转换
- ra_interface_lines_all 接口表各字段说明
- 期货大赛项目|十,MVC对js和css的压缩
- springboot打成的jar包如何在Linux上持久运行
- File类_常见的方法(获取目录中指定规则的内容)_listFiles