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

最新文章

  1. UE4新手之编程指南
  2. Javascript中JSON对象的操作以及遍历key/value
  3. Oracle表解锁语句
  4. web service上传参数代码实例
  5. ActiveMQ的几种消息持久化机制
  6. 白话学习MVC(八)Action的执行二
  7. js里的匿名函数 数组排序
  8. C++ Code_Slider
  9. NodeJS + Socket.io聊天服务器连接数达到1024后就连不上了
  10. php 半角与全角相关的正则
  11. pyqt4制作透明无边框窗体
  12. hdu4393 Throw nails(只用模拟前面500来次,后面根据速度、位置、id值排序即可)
  13. LED发光二极管
  14. Arch: Configurations
  15. Java表达式中的那些坑
  16. Excel表科学记数法的数字和文本的转换
  17. ra_interface_lines_all 接口表各字段说明
  18. 期货大赛项目|十,MVC对js和css的压缩
  19. springboot打成的jar包如何在Linux上持久运行
  20. File类_常见的方法(获取目录中指定规则的内容)_listFiles

热门文章

  1. CF1404E Bricks (最大权独立集)
  2. Java9至17的新特性总结
  3. linux更新源管理
  4. Oracle数据常用的备份与恢复?
  5. zk 节点宕机如何处理?
  6. python 列表,字典,元组,字符串,QuerySet之间的相互转换
  7. Mock 或 Stub 有什么区别?
  8. 学习k8s(一)
  9. 学习GlusterFS(五)
  10. 更改IE中的jdk版本