Android IPC 机制【2】--- Messenger[1]
16lz
2021-01-23
创建Service端,用于接收数据
MessengerService.java
packagecom.shieh.android.ipctest.service;importutil.MyConstants;importandroid.app.Service;importandroid.content.Intent;importandroid.os.Handler;importandroid.os.IBinder;importandroid.os.Message;importandroid.os.Messenger;importandroid.util.Log;publicclassMessengerServiceextendsService{privatestaticfinalStringTAG="MessengerService";/***1.创建一个Handler来处理收到的消息**/publicstaticclassMessengerHandlerextendsHandler{@OverridepublicvoidhandleMessage(Messagemsg){//TODOAuto-generatedmethodstubswitch(msg.what){caseMyConstants.MSG_FROM_CLIENT:Log.i(TAG,"receivedfromClient:"+msg.getData().getString("msg"));}super.handleMessage(msg);}}/***2.通过Handler创建一个Messenger对象**/privatefinalMessengermMessenger=newMessenger(newMessengerHandler());/***3.返回底层的Binder对象**/@OverridepublicIBinderonBind(Intentintent){//TODOAuto-generatedmethodstubreturnmMessenger.getBinder();}/***4.在Manifest中注册该服务,让其单独运行在一个进程中**/}
2. 注册MessengerService在独立线程中运行
Manifest.xml中添加:
<serviceandroid:name="com.shieh.android.ipctest.service.MessengerService"android:process=":remote"></service>
3. 服务端发送msg并传递数据
packagecom.shieh.android.ipctest;importcom.shieh.android.ipctest.service.MessengerService;importutil.MyConstants;importandroid.app.Activity;importandroid.content.ComponentName;importandroid.content.Context;importandroid.content.Intent;importandroid.content.ServiceConnection;importandroid.os.Bundle;importandroid.os.IBinder;importandroid.os.Message;importandroid.os.Messenger;importandroid.os.RemoteException;publicclassMainActivityextendsActivity{privatestaticfinalStringTAG="MainActivity";privateMessengermService;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Intentintent=newIntent(this,MessengerService.class);bindService(intent,mConnection,Context.BIND_AUTO_CREATE);}privateServiceConnectionmConnection=newServiceConnection(){@OverridepublicvoidonServiceDisconnected(ComponentNamename){}@OverridepublicvoidonServiceConnected(ComponentNamename,IBinderservice){mService=newMessenger(service);Messagemsg=Message.obtain(null,MyConstants.MSG_FROM_CLIENT);Bundledata=newBundle();data.putString("msg","Hello,ThisisClientsaying");msg.setData(data);try{mService.send(msg);}catch(RemoteExceptione){e.printStackTrace();}}};@OverrideprotectedvoidonDestroy(){unbindService(mConnection);super.onDestroy();}}
更多相关文章
- android(7)(写数据权限)
- android之从SD卡读取数据
- 操作Android 手机通讯录数据库
- Android学习 数据存储之_文件存储
- Android BaseAdapter基本使用及数据刷新
- Android Studio学习:中级控件:使用Intent进行页面之间数据传输
- Android 数据存储(数据库、文件、参数)操作实例
- Android中子线程网络查看器与Handler消息处理器
- android 串口通信,蓝牙通信等需要输出十六进制数据的方法