问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Android 为什么使用Handler

发布网友 发布时间:2022-04-21 23:58

我来回答

1个回答

热心网友 时间:2023-01-25 08:27

在Android的UI开发中,我们经常会使用Handler来控制主UI程序的界面变化。有关Handler的作用,我们总结为:与其他线程协同工作,接收其他线程的消息并通过接收到的消息更新主UI线程的内容。
我们假设在一个UI界面上面,有一个按钮,当点击这个按钮的时候,会进行网络连接,并把网络上的一个字符串拿下来显示到界面上的一个 TextView上面,这时就出现了一个问题,如果这个网络连接的延迟过大,可能是10秒钟甚至更长,那我们的界面将处于一直假死状态,而如果这段时间超 过5秒钟的话,程序会出现异常。
这时我们会想到使用线程来完成以上工作,即当按钮被按下的时候新开启一个线程来完成网络连接工作,并把得到的结果更新到UI上面。但是,这时候又会 出现另一个问题,在Android中,主线程是非线程安全的,也就是说UI的更新只能在本线程中完成,其他线程无法直接对主线程进行操作。
为了解决以上问题,Android设计了Handler机制,由Handler来负责与子线程进行通讯,从而让子线程与主线程之间建立起协作的桥梁,使Android的UI更新的问题得到完美的解决。接下来举例来诠释Handler的基本使用方法。
Handler的工作原理
一般情况下,在主线程中我们绑定了Handler,并在事件触发上面创建新的线程用于完成某些耗时的操作,当子线程中的工作完成之后,会对Handler发送一个完成的信号,而Handler接收到信号后,就进行主UI界面的更新操作。
2
Handler与子线程协作实例
1、创建Handler实现类,在主UI所在类中的内部类
class MyHandler extends Handler {
public MyHandler() { }
public MyHandler(Looper L) {
super(L);
}
// 重写handleMessage方法,接受数据并更新UI
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//此处根据msg内容进行UI操作
}
}

2、子线程的实现
class MyThread implements Runnable {
public void run() {
Message msg = new Message();
Bundle b = new Bundle();
b.putString("cmd", "update");
msg.setData(b);
MainActivity.this.myHandler.sendMessage(msg);
//通知Handler更新UI
}
}

通过以上的两个实现,我们只需要在MainActivity中声明MyHandler实例对象就可以完成线程之间的通讯和界面的更新操作。

MyHandler myHandler = newMyHandler();
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
粒上皇开口熟栗120g*5袋(共600g)-详细介绍 三皇王板栗介绍 品牌榜:2024年板栗十大品牌排行榜 投票结果公布【新】 为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 怎么可以去掉裤子上的油漆? 能讲讲Android的Handler机制吗 标点符号练习题,今天马上回答 裤子粘上了 油漆怎么办? 用什么能洗掉。 Android Handler机制 怎么用? 二年级语文标点符号专项训练 Android中Handler的使用方法 黑色裤子上的油漆怎么弄掉 裤子上的油漆怎么能清洗干净? 如何去除牛仔裤上的油漆? 黑裤子上染上红油漆应该怎样处理? 怎么洗掉裤子上的油漆? 裤子上的油漆,怎样才能洗掉啊? 小米10后盖碎了有影响吗 小米10保修期内后盖碎了 裤子上染上油漆怎么去掉? 裤子上的油漆怎么洗掉 小米10pro后盖碎了多少钱 牛仔裤沾上油漆怎么洗? 裤子上的油漆怎么才能洗掉 实心黄金手镯怎么样辨别内部是不是真金 android软件开发中handler怎样理解? Android的handler机制 怎么样设置默认浏览器 实心手镯如何辨别里面是不是真金? handler的使用 安卓用另一个界面的handler 怎么用 标点符号练习答案 我想查看手镯是不是金的 Android Handler消息机制? 怎样辨别铜手镯和金手镯??? 简述android studio中handler通信 a的片假名几笔? android中多个子线程中定义多个Handler的问题,求解答 あ是什么意思? android 使用handler为什么会造成内存泄漏 日语所有片假名的读法!!! android待机时handler 会运行吗 怎样快速准确的记住日语的平假字和片假字 求ANDROID中handler的问题