大家在Android开发中不免会遇到主线程跟新UI,线程切换的场景,其中Handler就是一名大将了有必要对他进行了解。

一、图解Handler的基本概念

什么是Handler呢,Handler是Android给我们提供来跟新UI的一套机制,也是一套消息处理的机制,可发送也可通过他来处理消息,我们看下图。

二、为什么用Handler

Android为什么要设计只能通过Handler机制跟新UI呢,最根本目的就是解决多线程并发问题,只有主线程能更新UI, 
试想多线程进行更新UI,又没有枷锁机制,会跟新界面混乱,如果对跟新ui 操作进行枷锁处理又会导致性能下降,Handler就出现了

三、Handler的使用步骤

  • 主线程声明Handler实例
private Handler mHandler = new Handler(new Handler.Callback() {/*** @param message callback用于获取handler发送的消息,* @return  如果返回true就回去成功不会向下传递老,即不执行下面的handleMessage方法达到拦截目的*/@Overridepublic boolean handleMessage(Message message) {return false;}}){@Overridepublic void handleMessage(Message msg) {switch (msg.what){case 0://在这里可以进行UI操作//对msg.obj进行String强制转换String str = (String) msg.obj;mTvShow.setText(str);break;default:break;}}};
  • 子线程发送消息
mTvShow.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(2000);//模拟网络操作} catch (InterruptedException e) {e.printStackTrace();}//创建一个message设置what字段的值为1,主要是区分不同的message//设置message.obj的内容,调用Handler的message对象String str = "Nice to Meet You";Message msg = new Message();//创建也可用复用系统的message对象Message msg = mHandler.obtainMessage();msg.what = 0;//消息标示msg.arg1=2;//存放整形数据,如果携带数据简单,优先使用arg1和arg2,比Bundle更节省内存。msg.arg2=3;   //存放整形数据//msg.obj = str;//msg.obj = xxx可传递一个对象Bundle bundle=new Bundle();bundle.putString("dd","adfasd");bundle.putInt("love",5);msg.setData(bundle);msg.obj=bundle;   //用来存放Object类型的任意对象mHandler.sendMessage(msg);//子线程中向UI线程发送msg进跟新UI/*** mHandler.sendEmptyMessage(int);发布一个空消息* mHandler.sendMessage(msg);允许你安排一带数据的Message对象到队列中等待跟新。* mHandler.sendMessageAtTime(Message,long);* mHandler.sendMessageDelayed(Message,long);* sendEmptyMessageAtTime(int what, long uptimeMillis); //定时发送空消息* sendEmptyMessageDelayed(int what, long delayMillis); //延时发送空消息* sendMessageAtFrontOfQueue(Message msg); //最先处理消息(慎用)*/}}).start();}});

Android 系统(40)Handler的基本概念相关推荐

  1. Android系统开发之五:多线程编程详解(Handler ,Looper , Message , MessageQueue)

    本期的多线程主题与Android相关,侧重讲解在Android中如何用好多线程,需要你有Java的多线程基础. 首先我们思考几个问题,在Android应用中为什么要用多线程?为了解决哪些问题?或者为了 ...

  2. android系统应用程序,Android系统应用程序基本概念解读

    经常关注我们51CTO的朋友们应该知道,在以前的文章中我们对Android这一手机系统有一个详细的跟踪介绍,方便大家学习应用这一新的功能强大的开源手机系统,比如对Android源码的编译的解析的解析等 ...

  3. Android 系统(18)---Handler,MessageQueue与Looper关系

    一说到Android的消息机制,自然就会联想到Handler,我们知道Handler是Android消息机制的上层接口,因此我们在开发过程中也只需要和Handler交互即可,很多人认为Handler的 ...

  4. Android 系统应用-通信应用-网络质量判断(通信信号、信号强度、信号质量和频段等概念解释说明)

    一.前言 如何知道当前的网络质量? 上层如何判断APP数据刷新失败是网络问题还是APP本身的问题? 注:本篇主要侧重于概念的介绍,也会带入一些思考. 二.相关基础专业词汇介绍 dB 分贝(deci-b ...

  5. Android 系统(59)---Android开发:Handler异步通信机制全面解析(包含Looper、Message Queue)

    Android开发:Handler异步通信机制全面解析(包含Looper.Message Queue) 前言 最近刚好在做关于异步通信的需求,那么,今天我们来讲解下Android开发中的Handler ...

  6. 你或许理解错了Android系统权限管理的这两个概念

    今日科技快讯 昨日,3.15晚会上曝光了侵害消费者权益的事件:互动百科成最大虚假广告"垃圾站".郑州科视魔爪伸进几百所学校危害13万孩子眼睛.江苏远方中汇等企业被曝饲料违规使药物添 ...

  7. Android系统的开机画面显示过程分析

    提到Android系统的UI,我们最先接触到的便是系统在启动过程中所出现的画面了.Android系统在启动的过程中,最多可以出现三个画面,每一个画面都用来描述一个不同的启动阶段.本文将详细分析这三个开 ...

  8. Android 系统(243)---Android进程系列第一篇---进程基础

    Android进程系列第一篇---进程基础 内容预览.png 概述: 本文主要讲解进程基础,更深入的认识有血有肉的进程,内容涉及进程控制块,信号,进程FD泄露等等.仅供参考,欢迎指正. 一.从Linu ...

  9. 深入理解Android系统多用户

    一.引言 这篇文章以Android v28的源码为参考,介绍Android多用户的特性.使用方式和系统原理. 二.初识Android多用户 2.1 Android多用户简介 从Android 4.0开 ...

最新文章

  1. 几种常见自动化测试框架
  2. [转]常用Delphi开发资料网址
  3. 构建和运行Java 8支持
  4. MCUXpress IDE常用设置
  5. python修改mac地址_python利用_winreg模块制作MAC地址修改工具
  6. 十分漂亮的视频源码解析
  7. 说说过游戏保护(4)
  8. linux从Mac下载文件,如何将命令的输出保存到Bash中的文件(也称为Linux和macOS终端) | MOS86...
  9. HDU4548 美素数【水题】
  10. VS2010启动总是遇到异常提示的解决
  11. vue全局组件中再创建多个组件
  12. msfconsole常用搜索命令search
  13. 融云技术分享:融云安卓端IM产品的网络链路保活技术实践
  14. Python用win32模块让窗体闪烁!附源码
  15. 中科磐云 综合渗透测试
  16. Windows应急响应
  17. Android测试——(下篇)
  18. CentOS7 aarch64 arm平台sysbench安装及CPU、内存、IO测试
  19. 使用Arduino与L298N(红板) 驱动直流电机
  20. 2022年腾讯云618采购季有什么亮点

热门文章

  1. DECLARE_GLOBAL_DATA_PTR
  2. 【LeetCode】剑指 Offer 31. 栈的压入、弹出序列
  3. salt grains详解
  4. 组合数据类型,英文词频统计
  5. Mybatis框架简单使用
  6. python 代码片段22
  7. 一步一步教你在CentOS6.0下安装NS2(ns-allinone-2.34.tar.gz)模拟仿真工具
  8. SQL in和exists 比较
  9. python面试题之如何解决验证码的问题,用什么模块,听过哪些人工打码平台?
  10. 华为Python面试题