1、使用背景:
Android 4.0以后不能在UI线程(主线程)访问网络,并且主线程无法进行时间比较繁长的任务,所以需要子线程进行处理,然而4.0后Android只允许在主线程中更新UI,子线程不能更新UI界面,所以需要使用handler来传递消息给主线程,通过主线程更新UI。
2、Handler的作用:
将工作线程需要操作UI的消息传送到主线程,使得主线程可根据工作线程的需求更新UI,从而避免线程操作不安全的问题。
3、特点:
Handler有个特点,在执行new Handler()的时候,默认情况下Handler会绑定当前代码执行的线程,我们在主线程中实例化了mHandler,所以mHandler就自动绑定了主线程(UI线程)。

4、使用机理:
要使用Handler实现异步消息处理,首先我们需要在主线程中创建Handler对象并重写handleMessage()方法,然后当子线程中需要进行UI操作时,就创建一个Message对象,并通过sendMessage()将这条消息发送出去。之后这条消息会被添加到MessageQueue的队列中等待被处理,而Looper则会一直尝试从MessageQueue中取出待处理消息,最后分发回Handler的handleMessage()方法中。由于Halldler是在主线程中创建的,所以此时handleMessage()方法中的代码也会在主线程中运行,从而实现子线程通过Handler机制实现UI线程操作的目的。
4.1、Message、Handler、MessageQueue、Lopper介绍
Message:线程之间传递的消息,用于不同线程之间的数据交互。Message中的what字段用来区分不同消息,arg1,arg2用来传递int类型数据,obj传递任意类型字段。
Handler:负责发送消息和处理消息,sendMessage()用来发送消息,handlemessage()用来处理消息。
MessageQueue:是一个先进先出消息队列,用于存放Handler发送的消息。一个线程只有一个消息队列。
Lopper:消息队列的管理者,当MessageQueue中存在消息时,Looper将消息传递给handleMessage()方法中去。一个线程只有一个Looper。

5、使用一个简单的例子来了解Handler (输入一个数,显示从1加到该数的结果)
activity_main布局文件:

MainActivity代码:

运行结果:


本文详细介绍了Android中Handler的使用背景、作用和特点,解释了Handler如何在子线程与主线程间传递消息以更新UI。通过一个简单的示例展示了如何在Android应用中运用Handler实现异步操作并更新UI。Handler、Message、MessageQueue和Looper的角色和工作流程也得到了阐述。

328

被折叠的 条评论
为什么被折叠?



