Android 绑定远程Service(此Service开启在另外一个进程中)
16lz
2021-01-23
服务客户端(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);
- }
本文出自 “让梦冬眠” 博客,谢绝转载!
更多相关文章
- springmvc服务端+android客户端的文件上传
- Android腾讯微薄客户端开发十:博主广播篇
- java后台接收android客户端通过http方式发送的数据
- android客户端与web服务端的数据通信
- Android中从服务器端向客户端传数据
- android远程更新客户端
- Android与Java AIO实现简单Echo服务器与客户端
- 在Android上使用Http客户端的选择(译文)