Android中Handler简介

1.本文的阅读对象

本文的阅读对象是掌握了一些安卓基础知识的朋友,本文不会涉及源码,也不会有过多代码,对新手比较友好,用简单容易理解的语言描述Handler在安卓开发中的作用

2.Handler是什么?

我们先从字面分析,Handler由英文直译,可以翻译为处理者。在Android中,Handler机制主要用作异步消息处理,这是谷歌设计的一套机制,能帮助我们有序的处理异步操作。

3.Android中的UI线程

在android中,当应用启动之后,系统会创建一个线程,Ui线程,也就是MainThread,在这个线程中,你可以使用代码操作控件,产生交互效果,简单说,UI线程操作UI,在安卓中,UI的操作只能在UI线程中完成,谷歌就是这样设计的。当然这一点不是十分绝对的,这里我不过多叙述,朋友们可以先记住这一点,非UI线程不能操作UI。

4.如何在非UI线程中操作UI?

上一条已经说了,非UI线程不能操作UI,那么在非UI线程中如何操作UI控件呢,那么就要请出我们今天的主角了,也就是Handler。在说Handler之前,我要先说几个关键概念。

Looper:

循环器,主要负责从消息队列MessageQueue中取出消息。关于Looper,记住三个方法以及一个概念。第一个方法就是构造方法,在构造方法中Looper创建了一个消息队列MessageQueue,第二个方法是,prepare(),在这个方法中将一个Looper实例绑定到线程中,并保证当前线程只能有一个Looper实例。第三个方法是loop(),该方法是一个死循环,不断从消息队列中取出方法,如果队列为空,会直接return。还有一个概念就是消息队列。MessageQueue,在Handler机制中产生的消息都保存在消息队列中,原则是先进先出。以上就是Looper的简介,有兴趣的同学可以去阅读下源码。只看几个关键点就可以。

Handler:

处理者,相信大家都应该使用过,一般使用方式就是在Ui线程中创建该类对象,在非ui线程中使用该对象发送消息,在handleMessage中处理消息。关于Handler的源码,大家看一下构造方法就可以,在构造方法中,Handler获取了当前线程的looper,并通过这个looper实例获取了这个Looper的消息队列MessageQueue,这样就可以理解为三者绑定在了一起。关于消息的发送等操作,可以去看sendMessage等方法。

Message:

消息,使用过Handler的朋友都不会陌生。Message可以通过该对象的属性传递很多信息(what,obj,等),然后在HanderlMessage方法中处理该消息。关于Message的源码这里不在叙述。发送消息有这样几个常用方法。sendMessage、直接发送消息,sendMessageAtTime、在一个指定的时间发送消息,sendMessageDelayed,在一定延迟后发送消息。这里还要简单说一下handler的post相关方法。该方法参数是一个runnable对象,可以将线程发送到当前handler去执行,具体方法和上述相似。

介绍完以上几个概念相信大家都可在开发中使用Handler了,进而实现本小节的主题,在非ui线程中操作ui。

5.总结

以上简单概述了Handler的一些基本概念和基本使用方法,具体使用方法和具体源码可自行百度,本文主要的目的是给大家建立一个Handler的模糊概念。同时,如本文有错误内容欢迎大家批评指正。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值