Android 系统(40)Handler的基本概念
大家在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的基本概念相关推荐
- Android系统开发之五:多线程编程详解(Handler ,Looper , Message , MessageQueue)
本期的多线程主题与Android相关,侧重讲解在Android中如何用好多线程,需要你有Java的多线程基础. 首先我们思考几个问题,在Android应用中为什么要用多线程?为了解决哪些问题?或者为了 ...
- android系统应用程序,Android系统应用程序基本概念解读
经常关注我们51CTO的朋友们应该知道,在以前的文章中我们对Android这一手机系统有一个详细的跟踪介绍,方便大家学习应用这一新的功能强大的开源手机系统,比如对Android源码的编译的解析的解析等 ...
- Android 系统(18)---Handler,MessageQueue与Looper关系
一说到Android的消息机制,自然就会联想到Handler,我们知道Handler是Android消息机制的上层接口,因此我们在开发过程中也只需要和Handler交互即可,很多人认为Handler的 ...
- Android 系统应用-通信应用-网络质量判断(通信信号、信号强度、信号质量和频段等概念解释说明)
一.前言 如何知道当前的网络质量? 上层如何判断APP数据刷新失败是网络问题还是APP本身的问题? 注:本篇主要侧重于概念的介绍,也会带入一些思考. 二.相关基础专业词汇介绍 dB 分贝(deci-b ...
- Android 系统(59)---Android开发:Handler异步通信机制全面解析(包含Looper、Message Queue)
Android开发:Handler异步通信机制全面解析(包含Looper.Message Queue) 前言 最近刚好在做关于异步通信的需求,那么,今天我们来讲解下Android开发中的Handler ...
- 你或许理解错了Android系统权限管理的这两个概念
今日科技快讯 昨日,3.15晚会上曝光了侵害消费者权益的事件:互动百科成最大虚假广告"垃圾站".郑州科视魔爪伸进几百所学校危害13万孩子眼睛.江苏远方中汇等企业被曝饲料违规使药物添 ...
- Android系统的开机画面显示过程分析
提到Android系统的UI,我们最先接触到的便是系统在启动过程中所出现的画面了.Android系统在启动的过程中,最多可以出现三个画面,每一个画面都用来描述一个不同的启动阶段.本文将详细分析这三个开 ...
- Android 系统(243)---Android进程系列第一篇---进程基础
Android进程系列第一篇---进程基础 内容预览.png 概述: 本文主要讲解进程基础,更深入的认识有血有肉的进程,内容涉及进程控制块,信号,进程FD泄露等等.仅供参考,欢迎指正. 一.从Linu ...
- 深入理解Android系统多用户
一.引言 这篇文章以Android v28的源码为参考,介绍Android多用户的特性.使用方式和系统原理. 二.初识Android多用户 2.1 Android多用户简介 从Android 4.0开 ...
最新文章
- 几种常见自动化测试框架
- [转]常用Delphi开发资料网址
- 构建和运行Java 8支持
- MCUXpress IDE常用设置
- python修改mac地址_python利用_winreg模块制作MAC地址修改工具
- 十分漂亮的视频源码解析
- 说说过游戏保护(4)
- linux从Mac下载文件,如何将命令的输出保存到Bash中的文件(也称为Linux和macOS终端) | MOS86...
- HDU4548 美素数【水题】
- VS2010启动总是遇到异常提示的解决
- vue全局组件中再创建多个组件
- msfconsole常用搜索命令search
- 融云技术分享:融云安卓端IM产品的网络链路保活技术实践
- Python用win32模块让窗体闪烁!附源码
- 中科磐云 综合渗透测试
- Windows应急响应
- Android测试——(下篇)
- CentOS7 aarch64 arm平台sysbench安装及CPU、内存、IO测试
- 使用Arduino与L298N(红板) 驱动直流电机
- 2022年腾讯云618采购季有什么亮点
热门文章
- DECLARE_GLOBAL_DATA_PTR
- 【LeetCode】剑指 Offer 31. 栈的压入、弹出序列
- salt grains详解
- 组合数据类型,英文词频统计
- Mybatis框架简单使用
- python 代码片段22
- 一步一步教你在CentOS6.0下安装NS2(ns-allinone-2.34.tar.gz)模拟仿真工具
- SQL in和exists 比较
- python面试题之如何解决验证码的问题,用什么模块,听过哪些人工打码平台?
- 华为Python面试题