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的模糊概念。同时,如本文有错误内容欢迎大家批评指正。

你可能感兴趣的:(Android进阶知识)