Android(安卓)绑定远程Service(此Service开启在另外一个进程中)
16lz
2022-06-18
服务客户端(MainActivity):
- packagecom.example.remoteservicebind;
- importandroid.app.Activity;
- importandroid.content.ComponentName;
- importandroid.content.Context;
- importandroid.content.Intent;
- importandroid.content.ServiceConnection;
- importandroid.os.Bundle;
- importandroid.os.Handler;
- importandroid.os.IBinder;
- importandroid.os.Message;
- importandroid.os.Process;
- importandroid.os.RemoteException;
- importandroid.util.Log;
- importandroid.view.Menu;
- importandroid.view.View;
- importandroid.view.View.OnClickListener;
- importandroid.widget.Button;
- importandroid.widget.Toast;
- publicclassMainActivityextendsActivity{
- privatestaticfinalStringTAG="BindRemoteService";
- privateIRemoteServicemRemoteService=null;
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- ButtonbindRemoteService=(Button)findViewById(R.id.bind_remote_service);
- bindRemoteService.setOnClickListener(mBindListener);
- ButtonunBindRemoteService=(Button)findViewById(R.id.unbind_remote_service);
- unBindRemoteService.setOnClickListener(mUnBindListener);
- ButtonremoteServiceMethod=(Button)findViewById(R.id.remote_service_method);
- remoteServiceMethod.setOnClickListener(mRemoteServiceMethodListener);
- ButtonkillRemoteServiceProcess=(Button)findViewById(R.id.kill_remote_service_process);
- killRemoteServiceProcess.setOnClickListener(mKillRemoteServiceProcessListener);
- }
- privatefinalOnClickListenermBindListener=newOnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- Log.i(TAG,"MainActivity---->onClickBindRemoteService");
- bindService(newIntent(IRemoteService.class.getName()),mRemoteServiceConnection,Context.BIND_AUTO_CREATE);
- }
- };
- privatefinalOnClickListenermUnBindListener=newOnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- Log.i(TAG,"MainActivity---->onClickunBindService");
- unbindService(mRemoteServiceConnection);
- mRemoteService=null;
- }
- };
- privatefinalOnClickListenermRemoteServiceMethodListener=newOnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- if(mRemoteService==null){
- Toast.makeText(MainActivity.this,"没有绑定到服务",Toast.LENGTH_LONG).show();
- }else{
- try{
- Toast.makeText(MainActivity.this,mRemoteService.getName(),Toast.LENGTH_LONG).show();
- }catch(RemoteExceptione){
- }
- }
- }
- };
- privatefinalOnClickListenermKillRemoteServiceProcessListener=newOnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- intpid;
- try{
- pid=mRemoteService.getPid();
- Process.killProcess(pid);
- }catch(RemoteExceptione){
- e.printStackTrace();
- }
- }
- };
- privatefinalServiceConnectionmRemoteServiceConnection=newServiceConnection(){
- @Override
- publicvoidonServiceDisconnected(ComponentNamename){
- }
- @Override
- publicvoidonServiceConnected(ComponentNamename,IBinderservice){
- mRemoteService=IRemoteService.Stub.asInterface(service);
- }
- };
- privatefinalHandlermHandler=newHandler(){
- @Override
- publicvoidhandleMessage(Messagemsg){
- super.handleMessage(msg);
- }
- };
- @Override
- publicbooleanonCreateOptionsMenu(Menumenu){
- //Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
- getMenuInflater().inflate(R.menu.main,menu);
- returntrue;
- }
- }
远程服务(RemoteService):
- packagecom.example.remoteservicebind;
- importandroid.app.Service;
- importandroid.content.Intent;
- importandroid.os.IBinder;
- importandroid.os.Process;
- importandroid.os.RemoteException;
- importandroid.util.Log;
- /**
- *远程服务开启在另外一个进程中
- *@authorSimonXu
- *
- *2013-4-11上午11:12:44
- */
- publicclassRemoteServiceextendsService{
- privatestaticfinalStringTAG="BindRemoteService";
- privatestaticfinalintREPORT_MSG=1;
- //privatefinalHandlermHandler=newHandler(){
- //
- //@Override
- //publicvoidhandleMessage(Messagemsg){
- //
- //}
- //
- //};
- privatefinalIRemoteService.StubmRemoteServiceBinder=newIRemoteService.Stub(){
- @Override
- publicintgetPid(){
- Log.i(TAG,"RemoteService---->IRemoteService&getPid()");
- returnProcess.myPid();
- }
- @Override
- publicvoidbasicTypes(intanInt,longaLong,booleanaBoolean,
- floataFloat,doubleaDouble,StringaString)
- throwsRemoteException{
- }
- @Override
- publicStringgetName(){
- Log.i(TAG,"RemoteService---->IRemoteService&getName()");
- return"RemoteServicediaomao......";
- }
- };
- @Override
- publicIBinderonBind(Intentintent){
- Log.i(TAG,"RemoteService---->onBind");
- if(IRemoteService.class.getName().equals(intent.getAction())){
- returnmRemoteServiceBinder;
- }else{
- returnnull;
- }
- }
- @Override
- publicvoidonCreate(){
- Log.i(TAG,"RemoteService---->onCreate");
- //this.mHandler.sendEmptyMessage(REPORT_MSG);
- }
- @Override
- publicvoidonDestroy(){
- Log.i(TAG,"RemoteService---->onDestroy");
- //this.mHandler.removeMessages(REPORT_MSG);
- }
- @Override
- publicintonStartCommand(Intentintent,intflags,intstartId){
- Log.i(TAG,"RemoteService---->onStartCommand");
- returnsuper.onStartCommand(intent,flags,startId);
- }
- }
IRemoteService.aidl:
- packagecom.example.remoteservicebind;
- interfaceIRemoteService{
- intgetPid();
- StringgetName();
- voidbasicTypes(intanInt,longaLong,booleanaBoolean,
- floataFloat,doubleaDouble,StringaString);
- }
一书">
本文出自 “让梦冬眠” 博客,谢绝转载!
更多相关文章
- Android读取服务端TXT(JSON格式数据)返回汉字乱码的问题
- android 窃听电话
- windows系统 android源码下载
- Android上传文件到Django服务器
- [Android(安卓)Pro] Notification的使用
- springmvc服务端+android客户端的文件上传
- Android(安卓)手机端与服务端POST数据交互类
- Android录制或播放语音消息时关闭其他媒体播放
- Android(安卓)学习笔记