如何使用obtainMessage编写正确的处理程序?

use*_*005 5 android bluetooth handler

没有关于如何使用obtainMessage带有4个参数的方法编写处理程序的示例.

我尝试了几种方法,但仍然遇到同样的错误.

Handler mHandler = new Handler() {
    public final Message obtainMessage(int what, 
        int arg1, int arg2, Object obj) {

    }
};
Run Code Online (Sandbox Code Playgroud)

这显然是错误的,但考虑到没有任何示例可以帮助我,我可以使用一点方向.

Kla*_*aus 5

根据此页面,这些步骤是必需的:

  1. Handler在要处理消息的线程上准确创建对象.
  2. Message从创建的Handler使用中获取实例Handler.obtainMessage.不需要在Handler所有者线程上执行此操作.它可以从任何其他线程完成.
  3. 使用发送消息Handler.sendMessage.

为了进一步详细说明这个过程,这里有两个部分的示例代码.首先是一个BluetoothThread具有最小功能的示例,只需发送一个虚构文件.第二部分是使用所述线程的按钮点击处理程序.

public class BluetoothThread extends Thread {
    private Handler mHandler;

    public static final SEND_CODE = 1;
    public static final QUIT_CODE = 2;

    @Override
    public void run() {
        Looper.prepare();

        mHandler = new Handler() {
          @Override
          public void handleMessage(Message msg) {
            if (msg.what == SEND_CODE) {
                // Send the file using bluetooth
              }
            else if(msg.what == QUIT_CODE) {
              Looper.quitSafely();
            }
          }

        Looper.loop();
    }

    public Handler getThreadHandler() {
      return mHandler;
    }
}
Run Code Online (Sandbox Code Playgroud)

在主要活动中:

public void ButtonClicked(View v) {
  BluetoothThread thread = new BluetoothThread();
  thread.Start();

  Handler hnd = thread.getThreadHandler();
  hnd.sendMessage(hnd.obtainMessage(BluetoothThread.SEND_CODE, 0, 0, null));
}
Run Code Online (Sandbox Code Playgroud)