我试图理解这个版本的Message.obtain()
http://developer.android.com/reference/android/os/Message.html#obtain%28android.os.Handler,%20java.lang.Runnable%29
传递给 Message.obtain(( 的 Runnable 当然会被调用,但是定义的 Handler.handleMessage(( 没有被调用(在 msg.sendToTarget(( 甚至 mHandler.sendMessage(msg(上(
Handler mHandler;
class MyThread implements Runnable {
@Override
public void run() {
Message msg = Message.obtain(mHandler, new Runnable() {
@Override
public void run() {
System.out.println("This is printed for sure"); // This is printed for sure
}
});
msg.obj = "My message!";
msg.sendToTarget();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
System.out.println(msg.obj); // This is never printed
}
};
Thread t = new Thread(new MyThread());
t.start();
}
Message
类中看一下这种方法:
公共可运行获取回调 ((
检索此消息时将执行的回调对象 处理。此对象必须实现 Runnable。这被称为 接收此消息的目标处理程序以调度它。如果不是 设置,消息将被调度到接收处理者的 句柄消息(消息(。
以及您为获得Message
而调用的内容
public static Message obtain (Handler h, Runnable callback)
所以因为你设置了回调handleMessage(Message)
所以不叫:-(