前言

我们知道,Android的UI线程也叫主线程,工作线程(子线程)主要是负责执行耗时操作的线程,如果我们在子线程处理完事物后,需要通知UI线程更新界面。那么,子线程如何通知UI更新呢,这个就是通过Handler机制发送的消息来执行。

概念

首先来简单阐明一下几个关键字的概念:

1、Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。
2、Handler:你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从Message Queue取出)所送来的消息。
3、 Message Queue(消息队列):用来存放线程放入的消息。
4、线程:UI thread 通常就是main thread,而Android启动程序时会替它建立一个MessageQueue。

流程

子线程发送消息到Message Queue,主线程通过Looper去轮循这个消息队列,Looper轮循到的消息再传给主线程,主线程作出对应的操作。

示例

接下来我们通过一个简短示例说明

​
public class RandomNameActivity extends AppCompatActivity {private TextView tvName;private Button mButton;private String[] names = {"周星驰", "成龙", "李连杰", "叶问", "甄子丹","刘德华", "贾静雯", "吴孟达", "萧十一郎", "小李飞刀"};/*** 是否开始,0-否,1-是*/private int isStart;private Handler mHandler;private Timer mTimer = new Timer();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_random_name);tvName = findViewById(R.id.tv_name);mButton = findViewById(R.id.btn_random);mButton.setText("开始");mHandler = new Handler(new InnerCallback());mButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (isStart == 0) {start();} else {stop();}}});}private void start() {isStart = 1;mButton.setText("开始");mTimer.schedule(new TimerTask() {int max = names.length;int min = 0;@Overridepublic void run() {if (isStart == 1) {int num = (int) Math.round(Math.random() * (max - min) + min);if (num >= max) {num--;}//通过Message.obtain构造一个message,并通过Handler发送mHandler.sendMessage(Message.obtain(mHandler, num));}}}, 0, 500);}private void stop() {isStart = 0;mButton.setText("停止");mTimer.cancel();}private class InnerCallback implements Handler.Callback {@Overridepublic boolean handleMessage(Message msg) {//这里接收到sendMessage发送过来的消息,当前线程为UI线程int index = msg.what;tvName.setText(names[index]);return true;}}@Overrideprotected void onDestroy() {mHandler.removeCallbacksAndMessages(null);mTimer.cancel();super.onDestroy();}
}

下图是点击开始随机循环:

下图是正在随机点名循环中,点击按钮停止,再次点击继续,如此。。

这样就实现了一个简单的随机点名的案例。

欢迎大家指正。

android开发 问卷调查案例_Android开发Handler的简单使用——随机点名案例相关推荐

  1. * 完成随机点名案例;学生姓名都提前写在文件中;:每次敲回车,随机显示一个学生姓名,每人最多显示一次,所有人都显示完了就结束程序;

    import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOExce ...

  2. JS案例学习——随机点名案例

    随机点名案例,如图所示: 一.业务分析 ①点击开始按钮随机抽取数组中的一个数据,放在页面中 ②点击结束按钮删除数组当前抽取的一个数据 ③当抽取到最后一个数据的时候,开始和结束两个按钮同时禁用 ④点击重 ...

  3. 第四章案例 随机点名案例

    第四章案例  随机点名案例 案例需求分析: 在全班同学中随机的打印出一名同学名字. 我们对本案例进行分析,得出如下分析结果: 1.存储全班同学名字 2.打印全班同学每一个人的名字 3.在班级总人数范围 ...

  4. android 技能标签功能_android开发工程师必备技能

    厚 学 网 android 开发工程师必备技能 android 软件开发工程师是 Android 平台发展中不可或缺的人才要素. 据介 绍,就我国目前来说, Android 研发人才缺口至少 30 万 ...

  5. android jni 人头检测_Android开发的技术层次

    任何一种移动开发生态系统其技术人员都是呈现金字塔式分布的.我借此也说说Developer和Programmer的区别: Programmer是真正意义上的程序员,写程序的.灵魂级 Developer是 ...

  6. android crash没有日志_Android开发必备神器CrashCanary

    阅读本文大概需要8分钟 作者:wangsj1992出处:https://www.jianshu.com/p/8676f7a05920 前言 安卓开发中,你是否遇到过如下困扰: 场景一 开发好一个功能后 ...

  7. android java 调用栈_Android开发中打印方法调用栈

    概要 在日常开发和debug的过程中,我们都需要看看某一个方法的调用StackTrace,如果是crash或者异常被抛出的情况下会直接看到对应的StackTrace,如: 39 5939 E Andr ...

  8. android dialog 隐藏状态栏_Android开发不得不收集的工具类集合

    嗨,你终于来啦 ~ 等你好久啦~ 喜欢的小伙伴欢迎关注,我会定期分享Android知识点及解析,还会不断更新的BATJ面试专题,欢迎大家前来探讨交流,如有好的文章也欢迎投稿.更新了几天Android基 ...

  9. android easylink 搜索设备_Android开发 EasyLink给wifi模块配网

    本文使用的是庆科wifi模块 ------------------------------------------------------------------------------------- ...

最新文章

  1. DLL: 一种直接法的激光雷达定位方案
  2. c专家编程/c陷阱_如何避免常见的初学者陷阱并像专家一样开始编码
  3. 算法工程师在岗3年小结!
  4. 006_JDK的Number派生类对Comparable接口的实现
  5. php上传图文,php+ajax实现异步上传图文功能详解
  6. 修改DEDECMS文章标题长度,解决DEDECMS文章标题显示不全
  7. 搭建Jenkins+Sonarqub+Mysql+Android(上篇)
  8. 初一模拟赛(4.20)
  9. [CATARCS_2017] Week 1
  10. PaperNotes(2)-Generative Adversarial Nets
  11. python输入一个整数列表 列表元素为18_Python-18 (高级变量1--列表)
  12. java interpreter_解释器模式(Interpreter)Java
  13. 线性表之--队列操作
  14. 力扣——204. 计数质数
  15. selenium-滚动
  16. java期末大作业:记事本
  17. LSL学习笔记(4)
  18. android动态权限依赖库,动态申请app权限:郭霖大神的PermissionX库带你告别原生
  19. 中专学校计算机科目试讲稿,中专10分钟试讲教案模板
  20. Java基础入门:IDEA软件安装和软件初始化设置

热门文章

  1. Spring Bean装配
  2. logback-spring.xml
  3. 《深入理解Android:卷III A》一一第3章 深入理解AudioService
  4. 将Myeclipse非maven项目,导入到IDEA
  5. 微成本搭建企业高效沟通平台
  6. 搜索引擎特征码(转)
  7. SecureCRT安装
  8. Swagger2接口注释参数使用数组
  9. java中三种常见内存溢出错误的处理方法(good)
  10. Android架构:认识简法设计与EIT软件造形(序)