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

Handler异步通信系统的更多相关文章

  1. c#编写的基于Socket的异步通信系统

    c#编写的基于Socket的异步通信系统 SanNiuSignal是一个基于异步socket的完全免费DLL:它里面封装了Client,Server以及UDP:有了这个DLL:用户不用去关心心跳:粘包 ...

  2. Android ------ handler 异步处理消息

    Handler基本概念: Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取出,然后对消息进行出来,就是发 ...

  3. Android之Handler(异步消息处理)机制

    1. 概述 Handler . Looper .Message 这三者都与Android异步消息处理线程相关的概念.那么什么叫异步消息处理线程呢?异步消息处理线程启动后会进入一个无限的循环体之中,每循 ...

  4. Android Handler 异步消息处理机制的妙用 创建强大的图片加载类(转)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38476887 ,本文出自[张鸿洋的博客] 最近创建了一个群,方便大家交流,群号: ...

  5. 【Android】Android实现Handler异步详解

    方式不止一种,这里使用的是Timer类,创建一个定时器.我们经常需要获得移动设备端口的显示屏信息,但是onCreate()方法执行的时候,OnShow()方法不一定执行了,也就是说,在执行Oncrea ...

  6. Android Handler 异步消息处理机制的妙用 创建强大的图片载入类

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38476887 ,本文出自[张鸿洋的博客] 近期创建了一个群.方便大家交流,群号: ...

  7. c#编写的基于Socket的异步通信系统封装DLL--SanNiuSignal.DLL

    SanNiuSignal是一个基于异步socket的完全免费DLL:它里面封装了Client,Server以及UDP:有了这个DLL:用户不用去关心心跳:粘包 :组包:发送文件等繁琐的事情:大家只要简 ...

  8. c#编写的基于Socket的异步通信系统--SanNiuSignal.DLL已开源

    自从推出了SanNiuSignal.DLL,用户反映还是满好的;为了更好的服务于大家,我已经修复了很多BUG,同时把这个DLL开源;下面就先来介绍下 使用这个DLL开发出的简单的通信系统;如图: 想使 ...

  9. Android利用Handler异步获取子线程中的产生的值

        本文首发于cartoon的博客     转载请注明出处:https://cartoonyu.github.io/cartoon-blog     近段时间有一个需求:在线获取图片并且显示在界面 ...

随机推荐

  1. [SniperOJ](web) Inject again 注入 过滤左右括号 order by

    0x00 题目概述 题目地址:http://web2.sniperoj.cn:10004/ 拿到题,尝试注入,发现有过滤. 进行fuzz,发现过滤了 左右括号,分号,等号 ,还有一些查询关键字 . 在 ...

  2. 面向对象编程(C++篇4)——RAII

    目录 1. 概述 2. 详论 2.1. 堆.栈.静态区 2.2. 手动管理资源的弊端 2.3. 间接使用 2.4. 自下而上的抽象 3. 总结 4. 参考 1. 概述 在前面两篇文章<面向对象编 ...

  3. Bean实例化方式

    https://blog.csdn.net/diaosinixiheixiu/article/details/78919395 https://www.cnblogs.com/deng-cc/p/89 ...

  4. IO、NIO和AIO的区别

      IO和NIO的区别:其本质就是阻塞和非阻塞的区别. 阻塞概念:应用程序在获取网络数据的时候,如果网络传输数据很慢,那么久一直等着,知道传输完毕为止.非阻塞概念:应用程序直接可以获取已经准备就绪好的 ...

  5. SpringCloud项目中接入Nacos作为注册中心

    具体demo         https://blog.csdn.net/qq_33619378/article/details/95212754 <?xml version="1.0 ...

  6. Ajax的核心的对象是什么?

    Ajax的核心对象是XMLXMLHttpRequest 对象. XMLHttpRequest提供不重新加载页面的情况下更新网页,在页面加载后在客户端向服务器请求数据,在页面加载后在服务器端接受数据,在 ...

  7. 如何在自定义端口上运行 Spring Boot 应用程序?

    为了在自定义端口上运行 Spring Boot 应用程序,您可以在 application.properties 中指定端口. server.port = 8090

  8. 学习Haproxy (八)

    Unix套接字命令(Unix Socket commands) socat是一个多功能的网络工具,名字来由是"Socket CAT",可以看作是netcat的N倍加强版,socat ...

  9. jdbc的快速入门(需要mysql-connector-java-5.1.39-bin.jar包)

    package Lianxi;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;i ...

  10. 设备像素,CSS像素,设备独立像素

    1.概念 设备像素(device pixel)简写DP 设备像素又称 **物理像素** ,是设备能控制显示的最小单位,我们可以把它看做显示器上的一个点.我们常说的 1920x1080像素分辨率就是用的 ...