urlname
type
Post
password
SyncToConfluence
category
Android
date
Feb 23, 2023 22:46
slug
a17ea3422e4f
icon
Button
catalog
summary
tags
Android
Handler
cover
Status
BusyTime
Status 1
status
Published
作用
- 定时消息:
to schedule messages and runnables to be executed at some point in the future
- 跨线程调用(如 Android 中只能在 UI 线程 更新UI,子线程就不行):
to enqueue an action to be performed on a different thread than your own.
相关方法
- 主要方法:
post(Runnable)post(Runnable)postAtTime(java.lang.Runnable, long)postDelayed(Runnable, Object, long)sendEmptyMessage(int)sendMessage(Message)sendMessageAtTime(Message, long)sendMessageDelayed(Message, long)
- 区别:
The post versions allow you to enqueue Runnable objects to be called by the message queue when they are received
The sendMessage versions allow you to enqueue aMessageobject containing a bundle of data that will be processed by the Handler'shandleMessage(Message)method (requiring that you implement a subclass of Handler).
使用步骤
- 新建
Handler对象,覆写handleMessage(Message)方法。
- 新建
Message对象,设置其携带的数据。
- 在 子线程 中通过
Handler.sendMessage(Message)方法发送信息。
- 在
Handler的handleMessage(Message msg)方法中处理消息,通知主线程作出相对应的UI工作。
简单使用——sendMessage
- 下面的例子,主要是演示在点击按钮后,启动一个子线程,并在子线程中,通过
handler机制,来通知UI更新
- 简单创建
XML布局文件:
- 创建
Handler对象
- 子线程中调用:
- 启动线程:
简单使用——post
Handler不仅提供了sendMessage(msg)方法来发送消息,还能使用post(Runnable)来发送消息,下面是一个简单的使用例子
- 定义
Runnable的实现类:
- 定义
TimeConsumingThread类:
- 启动线程:
简单使用——obtainMessage
- 这个的使用与
sendMessage(msg)类似,区别只在与,前者不需要创建Message对象,而后者需要
- 因为两者极其类似,这里只列出不同的代码
- 子线程中调用:
- 在主线程中获取 :
细节
- 每一个
Handler都会与一个Looper对应,而Looper与线程绑定,只有主线程在创建的时候,会自动初始化MainLooper,其他线程,如果要使用Handler,则需要手动进行准备Looper,可以在相应的线程中调用Looper.prepare(),否则报错
总结
Handler主要用于同一个进程间传递消息,主要可以三种方式可以进行传输,其效果都是等效
Handler一定要有对应的Looper才能正常使用
参考/推荐
- Author:CoderWdd
- URL:https://www.wuinsights.top//article/a17ea3422e4f
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts