赞
踩
- 33 private final IMessenger mTarget;
-
- 43 public Messenger(Handler target) {
- 44 mTarget = target.getIMessenger();
- 45 }
-
- 145 public Messenger(IBinder target) {
- 146 mTarget = IMessenger.Stub.asInterface(target);
- 147 }
在进程间通信中,一般在Service(准确的说是服务端)使用第一个构造函数:
- @Override
- public IBinder onBind(Intent intent) {
- return new Messenger(mHandler).getBinder(); // getBinder() 返回的是 mTarget.asBinder()
- }
-
- private Handler mHandler = new Handler() { // 创建的是主线程的Handler,所以此处是在主线程处理客户端发过来的消息的
- @Override
- public void handleMessage(Message msg) {
- //处理客户端传来的消息
- }
- };
我们看一下为什么。
- Handler.java:
-
- 850 @UnsupportedAppUsage
- 851 final IMessenger getIMessenger() {
- 852 synchronized (mQueue) {
- 853 if (mMessenger != null) {
- 854 return mMessenger;
- 855 }
- 856 mMessenger = new MessengerImpl();
- 857 return mMessenger;
- 858 }
- 859 }
- 860
- 861 private final class MessengerImpl extends IMessenger.Stub {
- 862 public void send(Message msg) {
- 863
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。