2014年12月10日 星期三

[轉] 使用handler.obtainMessage() 時要注意的問題

handler.obtainMessage() 的作用是從當前的Handler中獲取指定的Message以供再次使用
尤其是在監測線程中 如果不斷的new Message() 可能出現錯誤 (錯誤信息已經忘了 沒有記錄 =.=)
有5個重載的方法
[java] view plaincopy
  1. public final Message obtainMessage ()   
  2. public final Message obtainMessage (int what)  
  3. public final Message obtainMessage (int what, Object obj)  
  4. public final Message obtainMessage (int what, int arg1, int arg2)  
  5. public final Message obtainMessage (int what, int arg1, int arg2, Object obj)  
what  arg1 arg2 obj分別對應Message中的相應成員變量
並且這樣獲得的Message不用再重新定義相應的值  十分好用 
一般來講 what是用來switch不同的操作 而其他3個參數都是定義屬性

要注意的是 具有兩個參數的方法只有一個 且第二個參數是Object 而不是arg1
並且如果在2個參數的方法中 將第二個參數填寫為本應該設置為arg1的值(int)時候 也不會報錯 因為:
1. arg1有缺省值0
2. int型可以被自動轉化為Integer
但是arg1的值卻被賦給了msg,obj 所以在Handler中的arg1值就為0了

沒有留言:

張貼留言