一、Handler的定义:
          主要接受子线程发送的数据, 并用此数据配合主线程更新UI.
          解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发, 比如说, 你要是点击一个 Button, Android会分发事件到Button上,来响应你的操作。  如果此时需要一个耗时的操作,例如: 联网读取数据,或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完成的话,会收到Android系统的一个错误提示  "强制关闭".  这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,Android主线程是线程不安全的,也就是说,更新UI只能在主线程中更新,子线程中操作是危险的. 这个时候,Handler就出现了来解决这个复杂的问题,由于Handler运行在主线程中(UI线程中),它与子线程可以通过Message对象来传递数据,这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据)  , 把这些消息放入主线程队列中,配合主线程进行更新UI。

自己的理解:在子线程获取数据(耗时的操作),在handler里更新UI或者进行具体操作。

二、Handler一些特点
        handler可以分发Message对象和Runnable对象到主线程中, 每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程),
        它有两个作用: (1):  安排消息或Runnable 在某个主线程中某个地方执行, (2)安排一个动作在不同的线程中执行
      
        Handler中分发消息的一些方法
        post(Runnable)
        postAtTime(Runnable,long)
        postDelayed(Runnable long)
        sendEmptyMessage(int)
        sendMessage(Message)
        sendMessageAtTime(Message,long)
        sendMessageDelayed(Message,long)
        以上post类方法允许你排列一个Runnable对象到主线程队列中,
        sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新.

三、Handler实例
      (1) 子类需要继承Handler类,并重写handleMessage(Message msg) 方法, 用于接受线程数据
      以下为一个实例,它实现的功能为 : 通过线程修改界面Button的内容


 1 public class MyHandlerActivity extends Activity {
 2     Button button;
 3     MyHandler myHandler;
 4 
 5     protected void onCreate(Bundle savedInstanceState) {
 6         super.onCreate(savedInstanceState);
 7         setContentView(R.layout.handlertest);
 8 
 9         button = (Button) findViewById(R.id.button);
10         myHandler = new MyHandler();
11         // 当创建一个新的Handler实例时, 它会绑定到当前线程和消息的队列中,开始分发数据
12         // Handler有两个作用, (1) : 定时执行Message和Runnalbe 对象
13         // (2): 让一个动作,在不同的线程中执行.
14 
15         // 它安排消息,用以下方法
16         // post(Runnable)
17         // postAtTime(Runnable,long)
18         // postDelayed(Runnable,long)
19         // sendEmptyMessage(int)
20         // sendMessage(Message);
21         // sendMessageAtTime(Message,long)
22         // sendMessageDelayed(Message,long)
23       
24         // 以上方法以 post开头的允许你处理Runnable对象
25         //sendMessage()允许你处理Message对象(Message里可以包含数据,)
26 
27         MyThread m = new MyThread();
28         new Thread(m).start();
29     }
30 
31     /**
32     * 接受消息,处理消息 ,此Handler会与当前主线程一块运行
33     * */
34 
35     class MyHandler extends Handler {
36         public MyHandler() {
37         }
38 
39         public MyHandler(Looper L) {
40             super(L);
41         }
42 
43         // 子类必须重写此方法,接受数据
44         @Override
45         public void handleMessage(Message msg) {
46             // TODO Auto-generated method stub
47             Log.d("MyHandler", "handleMessage......");
48             super.handleMessage(msg);
49             // 此处可以更新UI
50             Bundle b = msg.getData();
51             String color = b.getString("color");
52             MyHandlerActivity.this.button.append(color);
53 
54         }
55     }
56 
57     class MyThread implements Runnable {
58         public void run() {
59 
60             try {
61                 Thread.sleep(10000);
62             } catch (InterruptedException e) {
63                 // TODO Auto-generated catch block
64                 e.printStackTrace();
65             }
66 
67             Log.d("thread.......", "mThread........");
68             Message msg = new Message();
69             Bundle b = new Bundle();// 存放数据
70             b.putString("color", "我的");
71             msg.setData(b);
72 
73             MyHandlerActivity.this.myHandler.sendMessage(msg); // 向Handler发送消息,更新UI
74 
75         }
76     } 77 摘自:
http://www.cnblogs.com/dawei/archive/2011/04/09/2010259.html

78 }

[转]Android的Handler总结的更多相关文章

  1. Android的Handler机制

    Handler机制的原理 Android 的 Handler 机制(也有人叫消息机制)目的是为了跨线程通信,也就是多线程通信.之所以需 要跨线程通信是因为在 Android 中主线程通常只负责 UI ...

  2. Android 测试Handler的基本使用

    package com.sherlock.app_handler; import java.io.ByteArrayOutputStream; import java.io.InputStream; ...

  3. Android中Handler 、Thread和Runnable之间的关系

    在多线程编程的时候,我们经常会用到Handler,Thread和Runnable这三个类,我们来看看这三个类之间是怎么样的关系? 首先说明Android的CPU分配的最小单元是线程,Handler一般 ...

  4. Android之Handler,举例说明如何更新UI

    方法一:(java习惯,在android不推荐使用) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题 new Thread( new Runnable() { ...

  5. Android之Handler用法总结(1)

    方法一:(java习惯,在android平台开发时这样是不行的,因为它违背了单线程模型) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题 new Thread ...

  6. Android之Handler用法总结

    方法一:(java习惯,在android平台开发时这样是不行的,因为它违背了单线程模型) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题 new Thread ...

  7. 【Android】Handler使用入门

    本讲内容:Handler使用入门 当用户点击一个按钮时如果执行的是一个常耗时操作的话,处理不好会导致系统假死,用户体验很差,而Android则更进一步,如果任意一个Acitivity没有响应5秒钟以上 ...

  8. Android的Handler与Activity线程同步

    假设这里有同一个Runnable对象r. 可能采用的方法有: 第一种: handler.post(r); 实际上这种方法并没有调用线程someThread的start方法,而是直接调用了Runaabl ...

  9. 【Android】Handler的应用(三):从服务器端分页加载更新ListView

    在前面两节中,我们了解了如何从服务器中加载JSON数据. 现在,我们将把服务器中的JSON数据加载更新到ListView. 并且,结合之前博文的  “动态追加分页ListView数据”的相关知识,实现 ...

  10. Android之Handler探索

    Handler背景理解: Handler被最多的使用在了更新UI线程中,但是,这个方法具体是什么样的呢?我在这篇博文中先领着大家认识一下什么是handler以及它是怎么样使用在程序中,起着什么样的作用 ...

随机推荐

  1. include(thinkphp常用内置标签)

    变量输出使用普通标签就足够了,但是要完成其他的控制.循环和判断功能,就需要借助模板引擎的标签库功能了,系统内置标签库的所有标签无需引入标签库即可直接使用. XML标签有两种,包括闭合标签和开放标签,一 ...

  2. ios中的几种多线程实现

    iOS 支持多个层次的多线程编程,层次越高的抽象程度越高,使用起来也越方便,也是苹果最推荐使用的方法.下面根据抽象层次从低到高依次列出iOS所支持的多线程编程范式:1, Thread;2, Cocoa ...

  3. 用windbg+sos找出程序中谁占用内存过高,谁占用CPU过高(转载)

    原文地址: http://www.cnblogs.com/Lawson/archive/2011/01/23/1942692.html 很早看到windbg+sos方面的知识,一直没仔细学习,也许因为 ...

  4. 繁华模拟赛 vicent的字符串

    #include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...

  5. 我们为之奋斗过的C#-----Bank系统

    首先感谢大家抽出宝贵的时间来看这个Bank系统,这是我最近学的Bank系统,你们看我刚一学完就给你们分享了我的所学以及学习的一些经验,所以大家一定要耐心看下去,真的你会有所收获的,不信你看看.下面话不 ...

  6. MVC中html转义问题(直接输出html的方法)

    MVC中如果用@string(string是包含html代码的字符串)形式输出字符串,那么对应的html标签会自动转义,如果想直接输出html可用以下方法: @(new HtmlString( &qu ...

  7. CSS3实现二十多种基本图形

    CSS3可以实现很多漂亮的图形,我收集了32种图形,在下面列出.直接用CSS3画出这些图形,要比贴图性能更好,体验更加,是一种非常好的网页美观方式. 这32种图形分别为圆形,椭圆形,三角形,倒三角形, ...

  8. Lucene4.3开发之分词器总结

    Lucene4.3开发之分词器总结 http://java.chinaitlab.com/tools/940011.html

  9. poj3295

    Tautology Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10453   Accepted: 3967 Descri ...

  10. 【OpenStack】OpenStack系列7之Nova详解

    源码下载.安装 参考: https://github.com/yongluo2013/osf-openstack-training/blob/master/installation/openstack ...