`
zkl_1987
  • 浏览: 242615 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

android 笔记 --- Android中的Handler使用总结

阅读更多
在Android的UI开发中,我们经常会使用Handler来控制主UI程序的界面变化。有关Handler的作用,我们总结为:与其他线程协同工作,接收其他线程的消息并通过接收到的消息更新主UI线程的内容。

我们假设在一个UI界面上面,有一个按钮,当点击这个按钮的时候,会进行网络连接,并把网络上的一个字符串拿下来显示到界面上的一个TextView上面,这时就出现了一个问题,如果这个网络连接的延迟过大,可能是10秒钟甚至更长,那我们的界面将处于一直假死状态,而如果这段时间超过5秒钟的话,程序会出现异常。

这时我们会想到使用线程来完成以上工作,即当按钮被按下的时候新开启一个线程来完成网络连接工作,并把得到的结果更新到UI上面。但是,这时候又会出现另一个问题,在Android中,主线程是非线程安全的,也就是说UI的更新只能在本线程中完成,其他线程无法直接对主线程进行操作。

为了解决以上问题,Android设计了Handler机制,由Handler来负责与子线程进行通讯,从而让子线程与主线程之间建立起协作的桥梁,使Android的UI更新的问题得到完美的解决。接下来ATAAW.COM举例来诠释Handler的基本使用方法。

A、Handler的工作原理

一般情况下,在主线程中我们绑定了Handler,并在事件触发上面创建新的线程用于完成某些耗时的操作,当子线程中的工作完成之后,会对Handler发送一个完成的信号,而Handler接收到信号后,就进行主UI界面的更新操作。

B、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 = new MyHandler();


分享到:
评论

相关推荐

    android学习笔记

    3.android学习笔记--activity生命周期&handler使用 4.android学习笔记--HandlerThread和Bundle 5.android学习笔记--SQLite 6.android学习笔记--下载文件 7.android学习笔记--Content Provider 8.android学习笔记--...

    Android代码-Android-performance-optimization

    android性能优化整理 android性能优化整理 本人学习使用的笔记 长期更新 欢迎star QQ879689064 Handler产生的内存泄露

    android_handler学习笔记

    Handler在android里负责发送和处理消息。它的主要用途有(或者是干什么的):  1)执行计划任务,按计划(定时)发送消息或执行某个Runnanble(使用POST方法);  2)线程间通信,把从其他线程中发送来的消息放入消息...

    android 学习笔记5-线程阻塞 UI更新

    1、查看网络上的图片 2、主线程阻塞-ANR 3、刷新UI-Handler 4、在本地缓存图片-例如微信的图片 5、获取开源代码 6、显示一个新闻客户端 7、使用GET方式提交表单数据 8、使用POST方式提交表单

    Android开发笔记 Handler使用总结

    一、Handler的定义: 主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发, 比如说, 你要是...

    Android学习笔记.pdf

    适合有Java编程基础的同学使用。图文并茂,含有代码。包括环境搭建教程、创建模拟器、新建helloworld程序、电话拨号器、软件部署到模拟器、短信发送器、线性布局、相对布局、日志、activity、Android进程线程及...

    Pro Android学习:了解Handler小例子

    这是Pro Android学习系列中Android Service部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512

    android学习笔记之handler消息处理机制1

    在android中有一个规则:考虑到安全性,子线程不能动态的改变主线程中组件的属性值。 但为了执行一些耗时操作,往往会将它们放在子线程中,执行完毕要更新主线程中的UI,所以就有了handler消息处理机制。 handler就...

    xamarin学习笔记A13(安卓Handler异步消息处理)

    xamarin学习笔记A13(安卓Handler异步消息处理)Android中只能在主线程进行UI操作,不能在子线程操作,要根据子线程执行的结果来更新UI时,需要用到安卓异步消息处理机制。

    Android开发笔记之:Handler Runnable与Thread的区别详解

    本篇文章是对在Android中Handler Runnable与Thread的区别进行了详细的分析介绍,需要的朋友参考下

    Android Handler机制的工作原理详析

    上一次写完Binder学习笔记之后,再去看一遍Activity的启动流程,因为了解了Binder的基本原理,这次看印象会更深一点,学习效果也比以前好很多。本来打算直接来写Activity的启动流程的,但总觉得Handler也需要写一下...

    Android开发教程&笔记

    一本基础的android开发教程,包括了主要Activity,handler等的使用,以及其他基控件的使用。教程内容很清晰

    Android学习笔记之Handler处理机制的Looper

    Handler处理机制中,需要Looper来动态的进行循环,以此来不断将MessageQueue的数据取出。 在主线程中,Looper和MessageQueue已经在创建好的,因此我们不用自己创建它们就能用。 而在子线程中,如果我们想用Handler的...

    Android中异步类AsyncTask用法总结

    本文总结分析了Android中异步类AsyncTask用法。分享给大家供大家参考,具体如下: 最近整理笔记的时候,看到有关AsyncTask不是很理解,重新疏导了一下,有在网上找了一些资料,个人不敢独享,一并发在这里与大家共勉...

    Android学习笔记

    个人学习Android的东西,绝对经典,不容错过,或许很多的问题你都会在我这里找到一种似曾相识的感觉,

    AndroidDemo:Android演示

    Android Demo, 学习过程中的一些笔记 chapter3 ~ chapter13 为 「Android 群英传」的 Demo ,做了部分修改并在上面增加了一些注释及评论用于备忘 art_Chapter[chapterNumber] 为 「Android 开发艺术探索」的 Demo ,...

    基于Bmob平台实现的记事本

    这是一个基于Bmob平台实现的记事本源码,代码中比较详细的注释解释了如何借助Bmob平台强大的后台处理功能实现Android客户端与后台服务器的数据交换。同时案例里面的侧滑菜单、自定义Adapter, ListView, Handler, ...

    百度地图开发java源码-blog-backup:学习文章,也是我博客的备份

    学习时候,所做的一些笔记。方便之后复习查阅。 一. Notes for Algortihms 顺时针打印链表矩阵 链表中环的入口节点 树中两个节点的最低公共祖先 判断是否为平衡二叉树-解法二 机器人运动的范围 矩阵中的路径 滑动窗口...

Global site tag (gtag.js) - Google Analytics