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具体是怎么实现的,这篇文章讲的很详细了 点击打开链接
通常使用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具体是怎么实现的,这篇文章讲的很详细了 点击打开链接
相关文章推荐
- Handler基本使用(二)new Message 、 Handler.obtainMessage和Message.obtain
- 使用handler.obtainMessage() 时要注意的问题
- Android—Handler.obtainMessage()与new Message()相比
- handler.obtainMessage()与new Message的区别
- 关于在用异步消息处理机制使用Message.Obtain()方法(而非New Message)获得一个Message对象的好处
- 安卓handler使用(不使用Message与没有复写Handler)
- Handler消息传递机制(二)Message的各种使用
- android handler 基本使用 2
- handler.obtainMessage()理解
- Handler.sendMessage 与 Handler.obtainMessage.sendToTarget比较
- Handler.obtainMessage()
- Handler的基本使用(1)
- Handler写在主线程中,使用Message传递消息
- Handler的sendEmptyMessage和Post方法具体使用
- Android handler.obtainMessage()
- Handler,Looper,Message,MessageQueue,HandlerThread使用总结(上)
- android-handler基本使用
- Android开发学习之路-使用Handler和Message更新UI
- Message.obtain() 和Handler.obtainMessage()的区别
- Handler的基本使用(1)之更新progressBar