心胸决定格局,眼界决定境界...

Handler.sendMessage(new Message) 须发送新对象

Handler.sendMessage(new Message). 这个方法是指 Handler 在发送消息的时候,需要发送一个新的对象。也就是每次在发送消息时,在更新了 Date 后,需要重新构造 Message 对象,而不是利用已经构建的对象,否则会报错:

例如以下的代码:

 

[java] view plain copy
 
  1. class UpdateProgressBarThread implements Runnable{  
  2.         @Override  
  3.         public void run() {  
  4.             Message msg = new Message();  
  5.             int progress = 0;  
  6.             while(progress <= 100){    
  7.                     msg.arg1 = progress;  
  8.                 handler.sendMessage(msg);  
  9.                 progress += 10;  
  10.   
  11.                 try {  
  12.                     Thread.sleep(1000);  
  13.                 } catch (InterruptedException e) {  
  14.                     e.printStackTrace();  
  15.                 }  
  16.             }  
  17.             msg.arg1 = -1;  
  18.             handler.sendMessage(msg);  
  19.         }         
  20.     }  

 

看似没错,但其实在运行时会报错。

 

正确的代码应该是:

 

[java] view plain copy
 
  1. class UpdateProgressBarThread implements Runnable{  
  2.         @Override  
  3.         public void run() {  
  4.             int progress = 0;  
  5.             while(progress <= 100){  
  6.                 Message msg = new Message();  
  7.                 msg.arg1 = progress;  
  8.                 handler.sendMessage(msg);  
  9.                 progress += 10;  
  10.   
  11.                 try {  
  12.                     Thread.sleep(1000);  
  13.                 } catch (InterruptedException e) {  
  14.                     e.printStackTrace();  
  15.                 }  
  16.             }     
  17.             Message msg = handler.obtainMessage();//同 new Message();  
  18.             msg.arg1 = -1;  
  19.             handler.sendMessage(msg);  
  20.         }         
  21.     }  

 

 

若是了解 Handler 的消息队列机制,就会明白为什么会报“This message is already in use.”的错误了,因为 Handler 每次 sendMessage() 时,都会将一个消息送到一个消息对队列中,所以必须必须是一个新的 Message 对象才行。

posted @ 2016-06-22 11:59  WELEN  阅读(1143)  评论(0)    收藏  举报