Android Handler.handleMessage() 不会被调用



我试图理解这个版本的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)所以不叫:-(

最新更新