在平时写程序时,我们一般都是在子线程中向主线程发送消息,从而完成请求的处理,这个很常见,不用多说了。那么有时候,我们也可能碰到这样子的一种需求:需要主线程来向子线程发送消息,希望子线程来完成什么任务。如果这样子应该怎么做呢?这就是这篇文章将要讨论的内容。
一、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;//取出该子线程的Looper 16 public void run() { 17 18 Looper.prepare();//创建该子线程的Looper 19 looper = Looper.myLooper();//取出该子线程的Looper 20 Looper.loop();//只要调用了该方法才能不断循环取出消息 21 } 22 } 23 24 private TextView tv; 25 private MyThread thread; 26 27 28 private Handler mHandler;//将mHandler指定轮询的Looper 29 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