您的位置:首页 > 移动开发 > Android开发

Android:Handler消息机制

2016-03-30 16:27 211 查看
学习iOS也是大半年了,对于移动设备也有了那么一丢丢的理解,从今天开始,准备一点点学习Android系统知识,然后和iOS系统做做对比,希望对于移动设备的认识能更加清晰,也希望有只言片语帮助到大家,如有叙述不妥当的地方,十分欢迎指正,以下粗体均为引述。

看到《疯狂android讲义》是这样介绍Handler消息传递机制的:

        当一个程序第一次启动时,Android会同时启动一条主线程,主线程主要负责处理与UI相关的事件,如用户的按键事件、用户接触屏幕的事件、屏幕绘图事件,并把相关的事件 分发到相应的组件进行处理,所以主线程通常又叫做UI线程。

感觉和iOS中的主线程很是类似哦,iOS也是通过主线程来处理UI,比如,当执行异步的网络请求后,在子线程来出来类似json等数据,之后需要block异步在主线程中完成UI更新。

1、Handler的作用主要有2个:

(1)发送消息。

(2)获取、处理消息。

2、基本原理:为了让主线程能及时处理子线程发送的消息,显然只能通过回调的方法来实现----开发者只要重写Handler类中的方法,当新启动的线程发送消息时,消息会发送至与之关联的MessageQueue,而Handler会不断的从MessageQueue中获取并处理消息-----这将导致Handler类中处理消息的方法被回调。

3、在线程中使用Handler的基本步骤如下:

在被调用线程中完成以下内容:

(1)调用 Looper的prepare()方法为当前线程创建Looper对象,创建Looper对象时,它的构造器会创建与之配套的MessageQueue。

(2)有了Looper之后,创建Handler子类的实例,重写HandlerMessage()方法,该方法负责处理来自其它线程的消息。

(3)调用Looper的loop()方法启动Looper。

注:若被调用线程是主线程类,由于系统自动为主线程创建了Looper的实例,因此第一、三步骤可省略,而只需要做第2步即可。

在调用线程中完成:

(1)创建message,并填充内容。

(2)使用被调用类创建的Handler实例,调用sendMessage(Message msg)方法。

block在iOS中,我个人一直觉得和回调函数差不多,但却保持了代码逻辑上的清晰,感觉Looper就像是iOS中的runLoop一样,线程就不断的执行其中被安排的任务,而handler就比如是iOS中的drawRect这种,每个周期都会调用的函数,只是Android处理的关于Message的数据,这个线程每次在HandlerMessage中处理其他线程的消息,如果更简单的理解,就类似于iOS中很多系统的代理,我们只需要重写TableViewDelegate的相应的接口,系统自然会调哒
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: