本文主要是介绍Handler基本使用(二)new Message 、 Handler.obtainMessage和Message.obtain,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
通常使用handler发送信息时,会使用下面两种方式
//方法1Message msg = new Message();msg.what = 1;msg.arg1 = 2;msg.arg2 = 3;msg.obj = "demo";mHandler.sendMessage(msg);//方法2Message 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();//方法3Message 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具体是怎么实现的,这篇文章讲的很详细了 点击打开链接
这篇关于Handler基本使用(二)new Message 、 Handler.obtainMessage和Message.obtain的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!