你的位置:首页 > 软件开发 > ASP.net > 主线程与子线程之间相互通信

主线程与子线程之间相互通信

发布时间:2015-10-18 22:19:18
在平时写程序时,我们一般都是在子线程中向主线程发送消息,从而完成请求的处理,这个很常见,不用多说了。那么有时候,我们也可能碰到这样子的一种需求:需要主线程来向子线程发送消息,希望子线程来完成什么任务。如果这样子应该怎么做呢?这就是这篇文章将要讨论的内容。一、HandlerThre ...

主线程与子线程之间相互通信

      在平时写程序时,我们一般都是在子get='_blank'>线程中向主线程发送消息,从而完成请求的处理,这个很常见,不用多说了。那么有时候,我们也可能碰到这样子的一种需求:需要主线程来向子线程发送消息,希望子线程来完成什么任务。如果这样子应该怎么做呢?这就是这篇文章将要讨论的内容。

一、HandlerThread类

      主线程发送消息给子线程,通常思维逻辑就是:其实很简单,在主线程中实例化一个Handler,然后让他与子线程相关联(只要它与子线程的Looper相关联即可),这样子它处理的消息就是该子线程中的消息队列,而处理的逻辑都是在该子线程中执行的,不会占用主线程的时间。那么我们就来实现一下,看看这样子到底行得通还是行不通。新建项目,修改它的MainActivity的代码,如下即可:

 1 package com.example.handldertest; 2  3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.os.Handler; 6 import android.os.Looper; 7 import android.util.Log; 8 import android.widget.TextView; 9 10 public class ThreadHandlerActivity extends Activity{11   12 13   //创建子线程14   class MyThread extends Thread{15     private Looper looper;//取出该子线程的Looper16     public void run() {17     18       Looper.prepare();//创建该子线程的Looper19       looper = Looper.myLooper();//取出该子线程的Looper20       Looper.loop();//只要调用了该方法才能不断循环取出消息21     }22   }23   24   private TextView tv;25   private MyThread thread;26   27   28   private Handler mHandler;//将mHandler指定轮询的Looper29   30   protected void onCreate(Bundle savedInstanceState) {31       super.onCreate(savedInstanceState);32       tv = new TextView(this);33       tv.setText("Handler实验");34       setContentView(tv);35       thread = new MyThread();36       thread.start();//千万别忘记开启这个线程37       //下面是主线程发送消息38       mHandler = new Handler(thread.looper){39         public void handleMessage(android.os.Message msg) {40           Log.d("当前子线程是----->", Thread.currentThread()+"");41         };42       };43       mHandler.sendEmptyMessage(1);44   }45 46 }

原标题:主线程与子线程之间相互通信

关键词:线程

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。