普通的handler类是没有实现多线程的,在android中的handler要实现多线程,可以使用HandlerThread这个类,如下所示
package com.handlerThread; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; public class handlerThread2 extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.main); System.out.println("activity线程ID:"+Thread.currentThread().getId()); HandlerThread handlerThread = new HandlerThread("handlerThread"); handlerThread.start(); MyHandler handler = new MyHandler(handlerThread.getLooper()); Message msg = handler.obtainMessage(); msg.sendToTarget(); } class MyHandler extends Handler { public MyHandler() { super(); // TODO Auto-generated constructor stub } public MyHandler(Looper looper) { super(looper); // TODO Auto-generated constructor stub } @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); System.out.println("handler线程ID:"+Thread.currentThread().getId()); } } }
运行结果:
由此才可以说handler实现了真正意义上的多线程。
在上面的程序中我们看到有个新知识looper,那么什么是looper呢,如下是官方的解释
大概的意思就是说,looper是用来循环获取消息的,那么整个流程就可以看作是handler往消息队列中添加消息,looper再循环获取这些消息。