handler中的obtainMessage(int what,int arg1,int arg2)方法的任务是什么

时间:2014-06-24 09:15:19

标签: java android

我是初学者并试图了解BluetoothChat源代码。在BluetoothChatService中,我遇到了一些需要理解的问题。

public static final int STATE_NONE = 0;       // we're doing nothing
public static final int STATE_LISTEN = 1;     // now listening for incoming connections
mState = STATE_NONE;

private synchronized void setState(int state) {
    if (D) Log.d(TAG, "setState() " + mState + " -> " + state);
    mState = state;

// Give the new state to the Handler so the UI Activity can update
mHandler.obtainMessage(BluetoothChat.MESSAGE_STATE_CHANGE, state, -1).sendToTarget();

} 当我允许我的蓝牙打开然后在logcat中显示"setState() 0 -> 1"。但我无法理解状态如何变为“1”?

在android官方网站上,我发现obtainMessage是一个方法,它包含3个参数,如 - obtainMessage(int what, int arg1, int arg2) 任何人都可以解释一下这个获取消息是如何工作的吗?

JavaExperts需要您的帮助才能理解上述内容。

1 个答案:

答案 0 :(得分:0)

了解: 例如,您的main thread

中有一个处理程序
Handler uiHandler;

并且在您拥有的onCreate(BundlesavedInstanceState)内部

    uiHandler=new Handler(){
       public void handleMessage(Message msg){
        super.handleMessage(msg);
               }  
       }       

我们知道ui线程或应用程序的主线程 具有Looper.prepare() and Looper.loop()

的内在机制

我们不需要像其他线程那样做 而且我们还有另一个带有工作线程的类(用户  定义的线程)

     public class MyThread {
           Thread thread=new Thread(new 
         Runnable(){
                @Override
                    public void run(){
                 Message 
               message=uiHandler.obtainMessage(); 
                     ///
                       ///
                      uiHandler.sendMessage(message);         
                     }  
                    }).start();
             } 

在上面的代码中uiHandler.obtainMessage()的目的 是我们知道ui线程与 消息队列。向该消息队列发送消息 我们需要该消息队列中单元的地址。

          uiHandler.obtainMessage();/*takes an  
       address of that cell(Message object) and
    gives that to message.*/

最后

       uiHandler.sendMessage(message) /*sends the 
       message to message queue.*/

尝试与此相关联的查询并进行访问 this website 希望这会有所帮助