Handler

1. Message

  Messsge是线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据,Message的what字段,除此之外还可以使用arg1和arg2字段来携带一些整型数据,使用Obj字段携带一个Object对象。

2.Handler

  Handler处理者的意思,它主要用于发送和处理消息。发送消息一般使用Handler 的sendMessage方法,而发送消息经过一系列的辗转处理后,最终会传递到Handler的handleMessage()方法中。

3.MessageQueue

  MessageQueue是消息队列的意思,它主要用于存放所有通过Handler发送的消息。这部分消息会一直存在于消息队列中,等待被处理。每一个线程中只会有一个MessageQueue对象。

4.Looper

  Looper是每一个线程中的MessageQueue的管家,调用Looper的Loop()方法后,就会进入到一个无线循环当中,然后每当发现MessageQueue中存在一条消息,就会将它取出,并传递到Handler的handleMessage()方法中。每个线程中只会有一个Looper对象。

  1. import android.app.Activity;
  2. import android.os.Bundle;
  3. import android.os.Handler;
  4. import android.os.Message;
  5. import android.util.Log;
  6. import android.view.View;
  7. import android.view.View.OnClickListener;
  8. import android.widget.Button;
  9.  
  10. public class MainActivity extends Activity {
  11.  
  12. private Button button;
  13. private Handler handler;
  14. @Override
  15. protected void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.activity_main);
  18.  
  19. button = (Button) findViewById(R.id.button);
  20. button.setOnClickListener(new ButtonListener());
  21. handler = new FirstHandler();
  22. }
  23.  
  24. public class ButtonListener implements OnClickListener {
  25. @Override
  26. public void onClick(View v) {
  27. //当用户点击按钮时,我们创建一个消息对象,并用Handler发送该对象。
  28. Message msg = handler.obtainMessage();
  29. msg.what = 2;
  30. handler.sendMessage(msg);
  31. //上面一行代码将消息对象放置到消息队列中
  32. //1.Looper将会从消息队列中将将消息对象取出。
  33. //2.Looper将会找到与消息对象对应的Handler对象。
  34. //3.Looper将会调用handler对象的HandleMessage(Message msg)方法,用于处理消息对象
  35. }
  36. }
  37.  
  38. public class FirstHandler extends Handler {
  39. @Override
  40. public void handleMessage(Message msg) {
           int what = msg.what;
  41. Log.d("MainActivity", "msg: " + what);
  42. }
  43. }
  44. }

MainThread向WorkerThread发送数据

  1. public class MainActivity extends Activity {
  2.  
  3. private Button button;
  4. private Handler handler;
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.activity_main);
  9. button = (Button) findViewById(R.id.button);
  10. button.setOnClickListener(new OnClickListener() {
  11.  
  12. @Override
  13. public void onClick(View v) {
  14. Log.d("MainActivity", "Thread------->" + Thread.currentThread().getName());
  15. Message msg = handler.obtainMessage();
  16. msg.what = 100;
  17. handler.sendMessage(msg);
  18. }
  19. });
  20. Thread t = new NetworkThread();
  21. t.start();
  22. }
  23.  
  24. public class NetworkThread extends Thread {
  25.  
  26. @Override
  27. public void run() {
  28. //准备Looper对象
  29. Looper.prepare();
  30. //在workthread当中生成一个Handler对象
  31. handler = new Handler() {
  32. public void handleMessage(Message msg) {
  33. Log.d("MainActivity", "Thread------->" + Thread.currentThread().getName());
  34. int what = msg.what;
  35. Log.d("MainActivity", "what: " + what);
  36. }
  37. };
  38. //调用Looper的loop()方法之后,Looper对象将不断的从消息队列当中取出消息对象,然后调用Handler的handleMessage()方法处理消息对象。
  39. //如果消息队列当中没有对象,则该线程阻塞。
  40. Looper.loop();
  41. }
  42. }
  43.  
  44. }

异步消息处理机制——Handler用法的更多相关文章

  1. Android开发之异步消息处理机制Handler

    更加详细的介绍Handler的博文-http://blog.csdn.net/guolin_blog/article/details/9991569 Android中的异步消息处理主要有四个部分组成, ...

  2. 异步消息处理机制Handler

    Android 中的异步消息处理主要由四个部分组成,Message.Handler.MessageQueue 和Looper. 1. Message Message 是在线程之间传递的消息,它可以在内 ...

  3. Android 异步消息处理机制终结篇 :深入理解 Looper、Handler、Message、MessageQueue四者关系

    版权声明:本文出自汪磊的博客,转载请务必注明出处. 一.概述 我们知道更新UI操作我们需要在UI线程中操作,如果在子线程中更新UI会发生异常可能导致崩溃,但是在UI线程中进行耗时操作又会导致ANR,这 ...

  4. Android多线程----异步消息处理机制之Handler详解

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  5. 【转】Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38377229 ,本文出自[张鸿洋的博客] 很多人面试肯定都被问到过,请问Andr ...

  6. Android 异步消息处理机制 让你在深入了解 Looper、Handler、Message之间的关系

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/38377229 ,本文出自[张鸿洋的博客] 非常多人面试肯定都被问到过,请问And ...

  7. Android Handler 异步消息处理机制的妙用 创建强大的图片加载类(转)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38476887 ,本文出自[张鸿洋的博客] 最近创建了一个群,方便大家交流,群号: ...

  8. Android线程之异步消息处理机制(二)——Message、Handler、MessageQueue和Looper

    异步消息处理机制解析 Android中的异步消息处理主要有四个部分组成,Message.Handler.MessageQueue和Looper. 1.Message Message是在线程之间传递的消 ...

  9. Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系

    转自:http://blog.csdn.net/lmj623565791/article/details/38377229 ,本文出自[张鸿洋的博客] 很多人面试肯定都被问到过,请问Android中的 ...

随机推荐

  1. asp.net 常用的3中身份验证

    1. windows验证: IIS根据应用程序的设置来进行身份验证,要使用这中验证方式,必须禁止使用匿名用户登录. 2. Forms验证: 通过Cookies来保存用户凭证,对未登录的用户 重定向到自 ...

  2. JQ each

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. iOS中json解析出现的null,nil,NSNumber的问题

    在iOS开发过程中经常需要与服务器进行数据通讯,Json就是一种常用的高效简洁的数据格式. 问题现象 但是几个项目下来一直遇到一个坑爹的问题,程序在获取某些数据之后莫名崩溃.其实很早就发现了原因:由于 ...

  4. servlet 之 返回json数据并显示

    //实体类import java.util.ArrayList; public class ObjectType { private String type; private ArrayList< ...

  5. relativelayout常用属性

    ===================================================================================== 整理于http://naot ...

  6. Long,String类型的两个值进行比较,注意点!!!

    一: . Long 类型指的是 java.util.Lang 对象,而不是基本类型 long (注意大小写)Java中如果使用 == 双等于比较对象,等于比较的是两个对象的内存地址,也就是比较两个对象 ...

  7. AdapterView及其子类之一:基本原理(ListView、ListActivity类型)

    参考<疯狂android讲义>2.5节 1.AdapterView一般用于显示列表项,其内容由Adapter提供.调用Adapter的setAdapter(Adapter)方法设置Adap ...

  8. Unicode与汉字

    当遇到\u7f3a\u5c11  这样形式的字符串时,其实它代表的是汉字   具体的网上可以进行Unicode转中文   翻译

  9. FastReport.net 使用记录

    FastReport.net  打印设计功能非常强大,打印内容可以自己设计.数据源可以来至许多个表,打印设计后的表格数据是以二进制保存在数据库中的. 1.打印设计: private void Desi ...

  10. nginx模块开发获取post参数

    > 您好!>     我想请问下nginx模块里面怎么获取post参数,能有具体的代码更好!谢谢> 对于 "application/x-www-form-urlencode ...