android学习---使用Handler

在学习Handler之前,我们先弄懂两个概念。一个是进程,一个是线程进程就是程序运行时在内存中开辟的一个内存空间。而线程则是进程执行任务时的最小单元,分为主线程(负责更新UI)和子线程(执行耗时操作)。

一、为什么学习Handler

1.在每一个Android应用启动时,这个应用会启动一个UI线程(主线程)。2.只有在UI线程里才可以对控件、布局进行获取或设置。3.在Android设置思想中为了确保流畅的操作体验,一些耗时的任务不能够在UI线程中运行。4.如果UI线程花较多时间处理耗时操作(一般是5秒左右),让用户等待时间超过5秒而未处理Android系统会提示ANR提示信息。

Android中的异步消息处理主要由4部分组成:Message、Handler、MessageQueue和Looper。

二、什么是Handler

Handler是Android SDK 中处理异步消息的核心类
Handler的作用是让子线程通过与UI线程通信来更新UI界面
运行机制
1.创建一个Handler对象,系统就把Handler对象、UI线程和UI线程的消息队列捆绑起来
2.当我们在线程中处理完数据后,可以通过Handler对象将消息发出。

Message

Message是在线程之间传递的消息,他可以在内部携带少量的信息,用于在不同线程之间交换数据Message有What字段、arg1和arg2字段携带一些整型数据和obj字段携带一个Object对象,
What属性arg1、arg2属性obj属性
int类型的消息码,接受方用来识别是什么消息int类型,如果传递的消息仅仅是整型数字,可以将数字赋给arg1或arg2Object类型,如果传递的消息是String或任意类型时,可将数据赋给obj属性

MessageQueue

MessageQueue是消息队列的意思。它主要用于存放所有通过Handler发送的消息。这部分消息会一直存在于消息队列中,等待被处理。每个线程中只会有一个MessageQueue对象。

Looper

Looper是每个线程中的MessageQueue的管家。调用Looper的loop()方法后,就会进入到一个无线循环当中,然后每当发现MessageQueue中存在一条消息,就会将它取出,并传递到Handler的handleMessage()方法中,每个线程中也只会有一个Looper对象。

三、使用Handler的步骤

1.在UI线程中创建Handler匿名内部类对象
2.在匿名内部类中重写handleMessage方法
3.在UI线程中启动子线程
4.在线程中获得Message对象
5.将需要传递的数据赋值到Message对象中
6.通过Handler对象的sendMessage方法发送消息到消息列队
7.在handMessage方法中接受消息
Handler对象的常用方法
方法名解释
sendEmptyMessage()发送消息,消息内容是int类型
sendMessage()发送消息,消息内容是Message类型
obtainMesage()从消息池中获得一个Message对象,sednMeaage是发出此Message
post()将Runnable对象放入线程队列,不建议使用,post方法运行在UI线程中,耗时操作将阻塞UI线程
postDelayed()延迟多久后,将Runnable对象放入线程队列,不建议使用,post方法运行在UI线程中,耗时操作将阻塞UI线程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值