Messenger

  • Messenger介绍
    • 服务端
      • 客户端
        • 效果展示

Messenger介绍

Messenger是一种轻量级IPC方案,它的底层实现是AIDL,可以在不能进程之间进行数据传输

服务端

创建一个Service,在Handler中处理消息,在onBind中返回Messenger对象的Binder

public class MessengerService extends Service {    private static final String TAG = "MessengerService";    public static final int MESSAGE_FROM_CLIENT = 20;    @Nullable    @Override    //返回Binder    public IBinder onBind(Intent intent) {        return messenger.getBinder();    }    private final Messenger messenger = new Messenger(new MessengerHandle());    private static class MessengerHandle extends Handler{        @Override        public void handleMessage(@NonNull Message msg) {            switch (msg.what){                case MESSAGE_FROM_CLIENT:                    //接受来自客户端的消息                    Log.d(TAG,"" + msg.getData().getString("msg"));                    Messenger client = msg.replyTo;                    Message RelpyToMessage = Message.obtain(null,MainActivity.MESSAGE_FROM_SERVICE);                    Bundle ServiceBundle = new Bundle();                    ServiceBundle.putString("reply","Hi! Client");//返回消息至客户端                    RelpyToMessage.setData(ServiceBundle);                    try{                        client.send(RelpyToMessage);                    }catch (RemoteException e){                        e.printStackTrace();                    }                    break;            }            super.handleMessage(msg);        }    }}

在清单文件中配置Service

客户端

首先绑定服务端的Service,然后根据IBinder创建一个Messenger对象,然后在绑定名称向客户端发送消息,依旧在Handler处理服务端的消息

public class MainActivity extends AppCompatActivity{    private static final String TAG = "MainActivity";    public static final int MESSAGE_FROM_SERVICE = 10;//客户端发送给服务端    private Messenger messenger;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Intent intent = new Intent(MainActivity.this,MessengerService.class);        bindService(intent,connection,BIND_AUTO_CREATE);    }    @Override    protected void onDestroy() {        unbindService(connection);        super.onDestroy();    }    private  Messenger myMessenger = new Messenger(new MessengerHandle());    //连接Service并发送消息    private ServiceConnection connection = new ServiceConnection() {        @Override        public void onServiceConnected(ComponentName name, IBinder service) {            messenger =new Messenger(service);            Message message = Message.obtain(null, MessengerService.MESSAGE_FROM_CLIENT);            Bundle bundle = new Bundle();            //第一次向Service打招呼            bundle.putString("msg","Hi! Service");            message.setData(bundle);            //接收客户端信息时,需要把服务端的Messenger通过replyTo参数传递给服务端            message.replyTo = myMessenger;            try{                messenger.send(message);            }catch (RemoteException e){                e.printStackTrace();            }        }        @Override        public void onServiceDisconnected(ComponentName name) {        }    };    //接收Service的消息    private static class MessengerHandle extends Handler{        @Override        public void handleMessage(@NonNull Message msg) {            super.handleMessage(msg);           switch (msg.what){                case MESSAGE_FROM_SERVICE:                   Log.d(TAG,msg.getData().getString("reply"));                   break;            }        }    }}

效果展示

更多相关文章

  1. Android消息机制Message消息池
  2. Android之使用HttpPost提交数据到服务器(Android手机客户端和后台
  3. Android(安卓)中的消息传递,详解广播机制
  4. 自定义控件与Handler
  5. Android(安卓)客户端发送邮件(JMail方式)
  6. Android(安卓)博客园客户端 (二) 新界面&部分功能
  7. GoBelieve Android(安卓)SDK接入备忘
  8. Android(安卓)中Handler
  9. Android关于 https SSL handshake aborted 问题查找

随机推荐

  1. android 用到的技巧集
  2. Android: MediaScanner生成thumbnail的算
  3. Android播放视频(二)
  4. 【Android】Jetpack(二)
  5. android BitmapUtil 工具类
  6. android图像变为黑白
  7. android全屏设置
  8. android InputStream 转 String
  9. Android(安卓)FragmentActivity Intent
  10. Android视频录制