您的位置:首页 > 大数据 > 人工智能

Handler基本使用(二)new Message 、 Handler.obtainMessage和Message.obtain

2017-09-29 16:07 519 查看
转自:http://blog.csdn.net/u011791526/article/details/53540346

   通常使用handler发送信息时,会使用下面两种方式

     

[java] view
plain copy

//方法1  

 Message msg = new Message();  

 msg.what = 1;  

 msg.arg1 = 2;  

 msg.arg2 = 3;  

 msg.obj = "demo";  

 mHandler.sendMessage(msg);  

 //方法2  

 Message msg2 = mHandler.obtainMessage();  

 //obtainMessage();  

 //obtainMessage(what);  

 //obtainMessage(int what,Object obj);   

 //obtainMessage(int what,int arg1,int arg2);  

 //obtainMessage(int what,int arg1,int arg2,Object obj );  

 msg2.what = 1;  

 msg2.arg1 = 2;  

 msg2.arg2 = 3;  

 msg2.obj = "demo";  

 msg2.sendToTarget();  

 //方法3  

 Message msg3 = Message.obtain();  

 msg3.sendToTarget();  

      实际运用中,通常使用第二种方法或者第三种方法(其实是一样的,handler.obtainMessage最终也是调用了Message的obtain方法)。

      在Message的官方文档中,有这样一句话:

     While the constructor of Message is public, the best way to get one of these is to call Message.obtain() or one of the Handler.obtainMessage() 

     methods, which will pull them from a pool of recycled objects.

    意思是说,虽然Message的构造方法是公共的(可以通过New操作创建一个Message对象),但获取实例最好的方式还是Message.obtain()或者 Handler.obtainMessage() ,这两种方法提供的对象是消息池中那些已经创建但不再使用的对象。节约了内存资源。

   

  message的pool具体是怎么实现的,这篇文章讲的很详细了 点击打开链接 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: