下面的程序实现了在利用Handler在新线程当中处理消息的方法
Thread java.lang.Thread.currentThread()
public static Thread currentThread ()
Added in API level 1
Returns the Thread of the caller, that is, the current Thread.
Returns
· the current Thread.
android.os.HandlerThread.HandlerThread(String name)
public HandlerThread (String name)
Added in API level 1Message android.os.Handler.obtainMessage()
public final Message obtainMessage ()
Added in API level 1
void android.os.Message.sendToTarget()
public void sendToTarget ()
Added in API level 1
Sends this Message to the Handler specified by getTarget(). Throws a null pointer exception if this field has not been set.
Returns a new Message from the global message pool. More efficient than creating and allocating new instances. The retrieved message has its handler set to this instance (Message.target == this). If you don't want that facility, just call Message.obtain() instead.
重点的几个类
Handler类 HandlerThread类 Thread类 Message类
重点的几个方法
HandlerThread类 :
构造方法 HandlerThread(String name)
启动方法 start()
获取Looper getLooper()
Handler类:
构造方法 Handler(Looper looper)
获取消息对象 obtainMessage(Message msg)
处理消息 handlerMessage(Message msg)
Message类
发送消息 sendToTarget()
package com.example.handlertest;
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 HandlerTest extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//打印了当前线程的id和name
System.out.println("Activity------>"+Thread.currentThread().getId());
System.out.println("Activity------>"+Thread.currentThread().getName());
HandlerThread handlerThread = new HandlerThread("hehe");
handlerThread.start();
MyHandler myHandler = new MyHandler(handlerThread.getLooper());
Message msg = myHandler.obtainMessage();
//将msg发送到目标对象,所谓的目标对象,就是生成该msg对象的handler对象
msg.sendToTarget();
}
class MyHandler extends Handler{
public MyHandler(){
}
//调用了父类的构造函数接收了 looper对象
public MyHandler(Looper looper){
super(looper);
}
//每当我们想Handler对象发送一个message对象的时候 就会调用这个方法的
public void handlerMessage(Message msg){
System.out.println("handler------->"+Thread.currentThread().getId());
System.out.println("handler------->"+Thread.currentThread().getName());
System.out.println("handlerMessage");
}
}
}