Android(安卓)IPC 机制【2】--- Messenger[1]
16lz
2022-05-28
创建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】以BaseAdapter做适配器的ListView及其性能优化
- android之从SD卡读取数据
- 操作Android(安卓)手机通讯录数据库
- 【android】getCacheDir()、getFilesDir()、getExternalFilesDir
- 在android中获取系统后台运行的进程
- android快捷方式的创建与删除
- mybatisplus的坑 insert标签insert into select无参数问题的解决
- python起点网月票榜字体反爬案例