handler.obtainMessage() 的作用是从当前的Handler中获取指定的Message以供再次使用
尤其是在监测线程中 如果不断的new Message() 可能出现错误 (错误信息已经忘了 没有记录 =.=)
有5个重载的方法
1 | public final Message obtainMessage () |
what arg1 arg2 obj分别对应Message中的相应成员变量。
等价于:
1 | Message msg = handler.obtainMessage(); |
在Handler中接收
1 | Handler handler = new Handler(){ |
并且这样获得的Message不用再重新定义相应的值,十分好用。
一般来讲,what是用来switch不同的操作,而其他3个参数都是定义属性。
要注意的是,具有两个参数的方法只有一个,且第二个参数是Object而不是arg1。
并且如果在2个参数的方法中,将第二个参数填写为本应该设置为arg1的值(int)时候,也不会报错,因为:
- arg1有缺省值0
- int型可以被自动转化为Integer
但是arg1的值却被赋给了msg,obj 所以在Handler中的arg1值就为0了