Handler消息传递机制

原创 2015年07月07日 14:41:23

为什么要引入handler类?

多个线程同时操作UI组件时,可能导致线程安全问题。为此,android制定了一条简单的规则:只允许UI线程修改Activity里的UI组件。当程序第一次启动时,

android会同时启动一条主线程,主线程主要处理与UI组件相关的事件,如按键、触摸等,所以主线程又叫做UI线程。由于android中只允许UI线程处理UI组

件,就会导致新启动的线程无法动态修改界面组件的属性值。为了解决android应用的多线程问题,就要借助于Handler的消息传递机制了。


那么,什么是Handler类呢?

handler类的主要作用有两个:在新启动的线程中发送消息、在主线程中获取并处理消息。为了让主线程能适时的处理新启动的线程发送的消息,显然只能

通过回调的方式来实现,只需要重写Handler类中处理消息的方法即可。


Handler类的工作流程

先了解以下几个名词:

Message:Handler接受和处理的消息对象

Looper:每个线程只能拥有一个Looper对象。它的Loop方法负责读取消息队列中的消息,并把消息发送给该消息的Handler处理

MessageQueue:消息队列,采用先进先出的方式来管理消息,程序在创建Looper对象时,会在它的构造函数中创建MessageQueue对象


程序使用Handler发送消息,由Handler发送的消息必须被送到指定的消息队列中,所以当前线程中必须要有一个消息队列。由于消息队列是由Looper负责管理

的,故要使Handler能正常工作,当前线程中就必须由一个Looper对象。

那么,分为以下两种情况:

(1)主线程中,由于系统已经初始化了一个Looper对象,故可以直接创建Handler对象,进行消息的发送与处理

(2)子线程中,必须自己创建一个Looper对象,并启动它。若创建Looper对象,直接调用其prepare()方法即可。


版权声明:本文为博主原创文章,未经博主允许不得转载。

Handler消息传递机制(一)

为什么要用Handler: 出于性能优化考虑,Android的UI操作并不是线程安全的,这意味着如果有多个线程并发操作UI组件,可能导致线程安全问题。为了解决这个问题,Android制定了一条简单的原...
  • tuke_tuke
  • tuke_tuke
  • 2016年03月02日 21:09
  • 1235

Android中Handler传递消息机制详解

如果有多个线程并发操作UI,就有可能会导致线程安全问题,为了解决这个问题,Android制定了一个规则:只允许UI线程修改Activity里的UI,如果我们想动态的改变界面组件的属性值就需要用到Han...
  • android_for_James
  • android_for_James
  • 2016年04月17日 17:44
  • 2677

解析Android的消息传递机制Handler

1. 什么是Handler: Handler 网络释义“操纵者,管理者的”意思,在Android里面用于管理多线程对UI的操作; 2. 为什么会出现Handler: 在Android的设...
  • kekeleqy
  • kekeleqy
  • 2016年08月18日 11:10
  • 721

Handler消息传送机制总结

Handler类的主要作用: 1.在子线程中发送数据。 2.在主线程中接收数据,处理数据。 这个过程和使用的方法都是我们要理解的...
  • wenzhi20102321
  • wenzhi20102321
  • 2016年10月17日 12:50
  • 2374

Handler消息传递机制

在做Android开发的过程中,不免会遇到在其他线程中需要更新UI界面的情况,然而UI界面组件只允许主线程去更新它,这时我们就可以用到handler消息机制了。 跟Handler消息机制有关的几个组...
  • yus201120
  • yus201120
  • 2016年01月27日 09:40
  • 255

Handler消息传递机制

在安卓中,出于性能优化的考虑,UI线程操作并不安全,于是Android制定了一个规则:只允许UI线程修改Activity里的组件。但是这条规则又导致了另外一个问题,因为在Android平台上只允许UI...
  • shan286
  • shan286
  • 2015年12月24日 23:28
  • 269

Android消息传递之Handler的简单用法

Handler 机制主要用来解决Android应用的多线程问题——Android 不允许Activity新启动的线程访问Activity中的组件,这样就导致新启动的线程无法动态改变界面中组件的属性值。...
  • qq_27561483
  • qq_27561483
  • 2016年10月24日 11:23
  • 666

面试时最常问到的Handler消息机制源码详解

前言辞职后,最近又开始加入找工作的大军中了。不得不说今年找工作确实比以前难了。从几个朋友说他们公司快倒闭的情况也验证了这一点。最近面了2家,竟然都问到了Handler消息机制,虽然以前看过源码,但是很...
  • Alpha58
  • Alpha58
  • 2017年05月07日 13:50
  • 590

Android的消息机制——Handler的工作过程

在Android系统中,出于对性能优化的考虑,对于Android的UI操作并不是线程安全的。也就是说若是有多个线程来操作UI组件,就会有可能导致线程安全问题。所以在Android中规定只能在UI线程中...
  • ljd2038
  • ljd2038
  • 2016年03月14日 20:54
  • 6880

Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38377229 ,本文出自【张鸿洋的博客】很多人面试肯定都被问到过,请问Andro...
  • lmj623565791
  • lmj623565791
  • 2014年08月07日 09:17
  • 195254
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Handler消息传递机制
举报原因:
原因补充:

(最多只允许输入30个字)