Handler sendMessage 与 obtainMessage (sendToTarget)比较
转自:http://iaiai.iteye.com/blog/1992196
obtainmessage()是从消息池中拿来一个msg 不需要另开辟空间new
new需要重新申请,效率低,obtianmessage可以循环利用;
- //use Handler.obtainMessage(),instead of msg = new Message();
- //because if there is already an Message object,that not be used by
- //any one ,the system will hand use that object,so you don't have to
- //create and object and allocate memory.
- //it is also another example of object recycling and reusing in android.
- Message msg = mHandler.obtainMessage();
- msg.what = UPDATE_LISTVIEW;
- msg.obj = current + "/" + total + "songs";
- //this method is called from worker Thread,so we cannot update UI from here.
- msg.sendToTarget();
//use Handler.obtainMessage(),instead of msg = new Message(); //because if there is already an Message object,that not be used by //any one ,the system will hand use that object,so you don't have to //create and object and allocate memory. //it is also another example of object recycling and reusing in android. Message msg = mHandler.obtainMessage(); msg.what = UPDATE_LISTVIEW; msg.obj = current + "/" + total + "songs"; //this method is called from worker Thread,so we cannot update UI from here. msg.sendToTarget();
在看下面代码:
- Message msg = handler.obtainMessage();
- msg.arg1 = i;
- msg.sendToTarget();
- Message msg=new Message();
- msg.arg1=i;
- handler.sendMessage(msg);
Message msg = handler.obtainMessage(); msg.arg1 = i; msg.sendToTarget(); Message msg=new Message(); msg.arg1=i; handler.sendMessage(msg);
第一种写法是message 从handler 类获取,从而可以直接向该handler 对象发送消息,第二种写法是直接调用 handler 的发送消息方法发送消息。
路漫漫其修远兮 吾将上下而求索