MainActivity例如以下:

  1. package cc.c;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.os.Handler;
  6. import android.os.Looper;
  7. import android.os.Message;
  8. import android.widget.TextView;
  9. /**
  10. * Demo描写叙述:
  11. *
  12. * 演示样例过程例如以下:
  13. * 1 子线程给子线程本身发送消息
  14. * 2 收到1的消息后,子线程给主线程发送消息
  15. * 3 收到2的消息后,主线程给子线程发送消息
  16. *
  17. * 为实现子线程给自己本身发送消息,关键还是在于构造Handler时传入的Looper.
  18. * 在此就传入该子线程自己的Looper即调用Looper.myLooper(),代码例如以下:
  19. * Looper.prepare();
  20. * mHandlerTest1=new HandlerTest1(Looper.myLooper());
  21. * Looper.loop();
  22. *
  23. * 所以当mHandlerTest1.sendMessage(message);发送消息时
  24. * 当然是发送到了它自己的消息队列.
  25. *
  26. * 当子线程中收到自己发送的消息后,可继续发送消息到主线程.此时仅仅要注意构造
  27. * Handler时传入的Handler是主线程的Handler就可以,即getMainLooper().
  28. * 其余没啥可说的.
  29. *
  30. *
  31. * 在主线程处理消息后再发消息到子线程
  32. *
  33. *
  34. * 事实上这些线程间发送消息,没有什么;关键还是在于构造Handler时传入谁的Looper.
  35. *
  36. */
  37. public class MainActivity extends Activity {
  38. private TextView mTextView;
  39. private HandlerTest1 mHandlerTest1;
  40. private HandlerTest2 mHandlerTest2;
  41. private int counter=0;
  42. @Override
  43. protected void onCreate(Bundle savedInstanceState) {
  44. super.onCreate(savedInstanceState);
  45. setContentView(R.layout.main);
  46. init();
  47. }
  48.  
  49. private void init() {
  50. mTextView = (TextView) findViewById(R.id.textView);
  51.  
  52. //1 子线程发送消息给本身
  53. new Thread() {
  54. public void run() {
  55. Looper.prepare();
  56. mHandlerTest1=new HandlerTest1(Looper.myLooper());
  57. Message message = new Message();
  58. message.obj = "子线程发送的消息Hi~Hi";
  59. mHandlerTest1.sendMessage(message);
  60. Looper.loop();
  61. };
  62. }.start();
  63.  
  64. }
  65.  
  66. private class HandlerTest1 extends Handler {
  67.  
  68. private HandlerTest1(Looper looper) {
  69. super(looper);
  70. }
  71.  
  72. @Override
  73. public void handleMessage(Message msg) {
  74. super.handleMessage(msg);
  75. System.out.println("子线程收到:" + msg.obj);
  76.  
  77. //2 收到消息后可再发消息到主线程
  78. mHandlerTest2=new HandlerTest2(getMainLooper());
  79. Message message = new Message();
  80. message.obj = "O(∩_∩)O";
  81. mHandlerTest2.sendMessage(message);
  82. }
  83. }
  84.  
  85. private class HandlerTest2 extends Handler {
  86.  
  87. private HandlerTest2(Looper looper) {
  88. super(looper);
  89. }
  90.  
  91. @Override
  92. public void handleMessage(Message msg) {
  93. super.handleMessage(msg);
  94. mTextView.setText("在主线程中,收到子线程发来消息:" + msg.obj);
  95.  
  96. //3 收到消息后再发消息到子线程
  97. if (counter==0) {
  98. Message message = new Message();
  99. message.obj = "主线程发送的消息Xi~Xi";
  100. mHandlerTest1.sendMessage(message);
  101. counter++;
  102. }
  103.  
  104. }
  105. }
  106.  
  107. }

main.xml例如以下:

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. >
  6.  
  7. <TextView
  8. android:id="@+id/textView"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:text="@string/hello_world"
  12. android:layout_centerInParent="true"
  13. android:layout_marginTop="70dip" />
  14.  
  15. </RelativeLayout>

Handler具体解释系列(四)——利用Handler在主线程与子线程之间互发消息的更多相关文章

  1. Handler详解系列(四)——利用Handler在主线程与子线程之间互发消息,handler详解

    MainActivity如下: package cc.c; import android.app.Activity; import android.os.Bundle; import android. ...

  2. Android 使用handler实现线程间发送消息 (主线程 与 子线程之间)、(子线程 与 子线程之间)

    keyword:Android 使用handler实现线程间发送消息 (主线程 与 子线程之间).(子线程 与 子线程之间) 相信大家平时都有使用到异步线程往主线程(UI线程)发送消息的情况. 本文主 ...

  3. Android笔记(三十二) Android中线程之间的通信(四)主线程给子线程发送消息

    之前的例子都是我们在子线程(WorkerThread)当中处理并发送消息,然后在主线程(UI线程)中获取消息并修改UI,那么可以不可以在由主线程发送消息,子线程接收呢?我们按照之前的思路写一下代码: ...

  4. Handler主线程和子线程相通信

    //创建主线程的handlerprivate Handler handler = new Handler(){ @Override public void handleMessage(Message ...

  5. 19 主线程向子线程发送信息(handler)

    package com.fmy.handler; import android.app.Activity; import android.os.Bundle; import android.os.Ha ...

  6. Handler主线程子线程之间的互相通信

    Handler主线程子线程之间的互相通信 package com.wyl.dansnote; import android.app.Activity; import android.os.Bundle ...

  7. Handler具体解释系列(七)——Activity.runOnUiThread()方法具体解释

    MainActivity例如以下: package cc.testui3; import android.os.Bundle; import android.view.View; import and ...

  8. delphi 利用 InterlockedCompareExchange 实现主线程维一锁等待

    在进行资源锁定时,一般是线程之间进行交互,很少需要在主线程也对资源进行锁定. 不过在一些复杂的业务中,存在子线程与主线程的交互,且一些资源也同步在主线程中使用时,主线程资源锁,就有存在的必要. 假定有 ...

  9. Handler系列之创建子线程Handler

    上一篇我介绍了Handler机制的工作原理,默认情况下,ActivityThread类为我们创建的了主线程的Looper和消息队列,所以当你创建Handler之后发送消息的时候,消息的轮训和handl ...

随机推荐

  1. 通过javascript实现页面的横竖屏固定

    javascript是不能固定页面是横屏还是竖屏的,但是我们可以通过另外一种思路来监听window.orientation状态,假设我们要固定页面为横屏显示,则当window.orientation返 ...

  2. Android中使用WebView与JS交互全解析

    1.概述首先,需要提出一个概念,那就是hybrid,主要意思就是native原生Android和h5混合开发.为什么要这样做呢?大家可以想象一下针对于同一个活动,如果使用纯native的开发方式,An ...

  3. C语言中float,double类型,在内存中的结构(存储方式)

    C语言中float,double类型,在内存中的结构(存储方式)从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以doubl ...

  4. codeforces 361 C - Mike and Chocolate Thieves

    Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u   Description Bad ...

  5. EFBaseDal

    public class BaseDal<T> where T : class, new()    {        DataModelContainer db = new DataMod ...

  6. GO语言中的指针

    http://www.tizgrape.com/?p=100 Go语言中的指针语法和C++一脉相承,都是用*作为符号,虽然语法上接近,但是实际差异不小. Go使用var定义变量: var v6 *in ...

  7. RAC oracle删除数据库

    24:site2-DMS1:~ # su - oracleoracle@site2-DMS1:~> sqlplus / as sysdba SQL*Plus: Release 11.2.0.3. ...

  8. bzoj AC 50 庆祝~~

    No. 1050 Solved 50 Submit 212 AC 60 PE 6 WA 88 TLE 13 MLE 5 OLE 2 RE 29 CE 9 10001002100310041005 10 ...

  9. Contest20140711 loop 数论

    loop|loop.in|loop.out 题目描述: 有N个点. 现在重复这样的操作: 随机找一个出度为0的点p1,随机找一个入度为0的点p2,连一条有向边从p1指向p2.直到没有出度为0的点. 统 ...

  10. [BZOJ 2594] [Wc2006]水管局长数据加强版 【LCT】

    题目链接:BZOJ - 2594 题目分析 这道题如果没有删边的操作,那么就是 NOIP2013 货车运输,求两点之间的一条路径,使得边权最大的边的边权尽量小. 那么,这条路径就是最小生成树上这两点之 ...