安卓面试必问二为什么会有消息机制
来源:互联网 发布:sql创建默认值 编辑:程序博客网 时间:2024/06/04 18:09
在Android的UI开发中,我们经常会使用Handler来控制主UI程序的界面变化。有关Handler的作用,我们总结为:与其他线程协同工作,接收其他线程的消息并通过接收到的消息更新主UI线程的内容。
我们假设在一个UI界面上面,有一个按钮,当点击这个按钮的时候,会进行网络连接,并把网络上的一个字符串拿下来显示到界面上的一个 TextView上面,这时就出现了一个问题,如果这个网络连接的延迟过大,可能是10秒钟甚至更长,那我们的界面将处于一直假死状态,而如果这段时间超 过5秒钟的话,程序会出现异常。
这时我们会想到使用线程来完成以上工作,即当按钮被按下的时候新开启一个线程来完成网络连接工作,并把得到的结果更新到UI上面。但是,这时候又会 出现另一个问题,在Android中,主线程是非线程安全的,也就是说UI的更新只能在本线程中完成,其他线程无法直接对主线程进行操作。
为了解决以上问题,Android设计了Handler机制,由Handler来负责与子线程进行通讯,从而让子线程与主线程之间建立起协作的桥梁,使Android的UI更新的问题得到完美的解决。接下来举例来诠释Handler的基本使用方法。
A、Handler的工作原理
一般情况下,在主线程中我们绑定了Handler,并在事件触发上面创建新的线程用于完成某些耗时的操作,当子线程中的工作完成之后,会对Handler发送一个完成的信号,而Handler接收到信号后,就进行主UI界面的更新操作。
B、Handler与子线程协作实例
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();
- 安卓面试必问二为什么会有消息机制
- 安卓消息机制
- 安卓中的消息机制
- 安卓Handler消息机制
- 安卓消息处理机制
- 安卓消息处理机制
- 安卓消息处理机制
- 安卓 手写消息机制
- 安卓的消息机制
- 为什么会有serialVersionUID
- 为什么会有“剩男剩女”
- 为什么会有句柄
- 为什么会有hibernate
- 为什么会有servlet?
- 为什么会有异常
- 为什么会有JavaScript???
- 安卓handler消息处理机制
- 安卓消息处理机制-处理线程
- 提供一段JavaScript脚本以辅助迅雷下载页面中的所有pdf文件链接
- 黑马程序员——面向对象的总结
- NSMutableAttributedString 的使用方法,设置格式
- 基于CentOS-6.3-x86_64-mini自定义镜像
- 耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找
- 安卓面试必问二为什么会有消息机制
- 《网络编程》I/O 多路复用
- 通过判断ie的版本动态的加载js等其他文件,来解决不兼容问题
- servletcontext 的详细介绍
- Maven 使用指南(3): 简述Maven工作过程
- ceph存储 ceph中restful设计原理
- Xcode Build Settings中的Architecture概述
- getHibernateTemplate().execute(new HibernateCallback())方法
- SGU a^b-b^a