Android——Handler的原理和简单使用

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

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代码:

 

 

 运行结果:

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值