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