2013-06-23 33 views
2

有人可以向我解釋如何使用switchwhat字段來確定要執行的代碼。 另外如何創建消息obj在交換機中使用也會很好。我的處理程序代碼你如何使用消息類中的什麼字段?

例子:

Handler uiHandler = new Handler(){ 
    public void handleMessage(Message msg){ 
     switch(msg.what){ 

     } 
    } 
}; 

回答

4

如果您正在使用處理程序,我假設你想要做在不同的線程一些工作,並使用處理器B通信/ W,你是線程開始和主線程。看看下面的例子:

private static final int SUCCESS = 0; 
private static final int FAIL = 1; 

//This is the handler 
Handler uiHandler = new Handler(){ 
    @Override 
    public void handleMessage(Message msg){ 
     //Here is how you use switch statement 
     switch(msg.what){ 
     case SUCCESS: 
      //Do something  
      break; 
     case FAIL: 
      //Do something 
      break; 
     } 

    } 
}; 

//Here is an example how you might call it 
Thread t = new Thread() { 
    @Override 
    public void run(){ 
     doSomeWork(); 
     if(succeed){ 
      /*we can't update the UI from here so we'll signal our handler 
      and it will do it for us.*/ 
      // 'sendEmptyMessage(what)' sends a Message containing only the 'what' value. 
      uiHandler.sendEmptyMessage(SUCCESS); 
     }else{ 
      uiHandler.sendEmptyMessage(FAIL); 
     } 
    } 
} 

幸得這兩個線程:他們可能是一個良好的閱讀: Android: When should I use a Handler() and when should I use a Thread? & Android Handler actions not being processed

希望這有助於。

+0

實例和鏈接 – reagan

+0

非常有幫助我想我也可以發送一個包含該數據的數據包嗎? –

+1

捆綁是最後的手段,使用arg0,arg1和obj。使用Handler.obtainMessage()或Message.obtain()以適當的參數初始化消息。也不是真的,Handler被用來與不同的主題進行交談,OP可以說,你也可以用它來與自己交談 – pskink

0
@Override 
    public void handleMessage(Message msg) { 
     switch (msg.what) {    
     case SECOND_VALUE: 
      String s = (String) msg.obj; // if msg.obj is a string 
      break; 

     case FIRST_VALUE: 
      AnotherObject = (AnotherObject) msg.obj; // if it is another object 
      break; 

     default: 
      super.handleMessage(msg); 
     } 
    } 
相關問題