服务客户端(MainActivity):

        
  1. packagecom.example.remoteservicebind;
  2. importandroid.app.Activity;
  3. importandroid.content.ComponentName;
  4. importandroid.content.Context;
  5. importandroid.content.Intent;
  6. importandroid.content.ServiceConnection;
  7. importandroid.os.Bundle;
  8. importandroid.os.Handler;
  9. importandroid.os.IBinder;
  10. importandroid.os.Message;
  11. importandroid.os.Process;
  12. importandroid.os.RemoteException;
  13. importandroid.util.Log;
  14. importandroid.view.Menu;
  15. importandroid.view.View;
  16. importandroid.view.View.OnClickListener;
  17. importandroid.widget.Button;
  18. importandroid.widget.Toast;
  19. publicclassMainActivityextendsActivity{
  20. privatestaticfinalStringTAG="BindRemoteService";
  21. privateIRemoteServicemRemoteService=null;
  22. @Override
  23. protectedvoidonCreate(BundlesavedInstanceState){
  24. super.onCreate(savedInstanceState);
  25. setContentView(R.layout.activity_main);
  26. ButtonbindRemoteService=(Button)findViewById(R.id.bind_remote_service);
  27. bindRemoteService.setOnClickListener(mBindListener);
  28. ButtonunBindRemoteService=(Button)findViewById(R.id.unbind_remote_service);
  29. unBindRemoteService.setOnClickListener(mUnBindListener);
  30. ButtonremoteServiceMethod=(Button)findViewById(R.id.remote_service_method);
  31. remoteServiceMethod.setOnClickListener(mRemoteServiceMethodListener);
  32. ButtonkillRemoteServiceProcess=(Button)findViewById(R.id.kill_remote_service_process);
  33. killRemoteServiceProcess.setOnClickListener(mKillRemoteServiceProcessListener);
  34. }
  35. privatefinalOnClickListenermBindListener=newOnClickListener(){
  36. @Override
  37. publicvoidonClick(Viewv){
  38. Log.i(TAG,"MainActivity---->onClickBindRemoteService");
  39. bindService(newIntent(IRemoteService.class.getName()),mRemoteServiceConnection,Context.BIND_AUTO_CREATE);
  40. }
  41. };
  42. privatefinalOnClickListenermUnBindListener=newOnClickListener(){
  43. @Override
  44. publicvoidonClick(Viewv){
  45. Log.i(TAG,"MainActivity---->onClickunBindService");
  46. unbindService(mRemoteServiceConnection);
  47. mRemoteService=null;
  48. }
  49. };
  50. privatefinalOnClickListenermRemoteServiceMethodListener=newOnClickListener(){
  51. @Override
  52. publicvoidonClick(Viewv){
  53. if(mRemoteService==null){
  54. Toast.makeText(MainActivity.this,"没有绑定到服务",Toast.LENGTH_LONG).show();
  55. }else{
  56. try{
  57. Toast.makeText(MainActivity.this,mRemoteService.getName(),Toast.LENGTH_LONG).show();
  58. }catch(RemoteExceptione){
  59. }
  60. }
  61. }
  62. };
  63. privatefinalOnClickListenermKillRemoteServiceProcessListener=newOnClickListener(){
  64. @Override
  65. publicvoidonClick(Viewv){
  66. intpid;
  67. try{
  68. pid=mRemoteService.getPid();
  69. Process.killProcess(pid);
  70. }catch(RemoteExceptione){
  71. e.printStackTrace();
  72. }
  73. }
  74. };
  75. privatefinalServiceConnectionmRemoteServiceConnection=newServiceConnection(){
  76. @Override
  77. publicvoidonServiceDisconnected(ComponentNamename){
  78. }
  79. @Override
  80. publicvoidonServiceConnected(ComponentNamename,IBinderservice){
  81. mRemoteService=IRemoteService.Stub.asInterface(service);
  82. }
  83. };
  84. privatefinalHandlermHandler=newHandler(){
  85. @Override
  86. publicvoidhandleMessage(Messagemsg){
  87. super.handleMessage(msg);
  88. }
  89. };
  90. @Override
  91. publicbooleanonCreateOptionsMenu(Menumenu){
  92. //Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
  93. getMenuInflater().inflate(R.menu.main,menu);
  94. returntrue;
  95. }
  96. }

远程服务(RemoteService):

        
  1. packagecom.example.remoteservicebind;
  2. importandroid.app.Service;
  3. importandroid.content.Intent;
  4. importandroid.os.IBinder;
  5. importandroid.os.Process;
  6. importandroid.os.RemoteException;
  7. importandroid.util.Log;
  8. /**
  9. *远程服务开启在另外一个进程中
  10. *@authorSimonXu
  11. *
  12. *2013-4-11上午11:12:44
  13. */
  14. publicclassRemoteServiceextendsService{
  15. privatestaticfinalStringTAG="BindRemoteService";
  16. privatestaticfinalintREPORT_MSG=1;
  17. //privatefinalHandlermHandler=newHandler(){
  18. //
  19. //@Override
  20. //publicvoidhandleMessage(Messagemsg){
  21. //
  22. //}
  23. //
  24. //};
  25. privatefinalIRemoteService.StubmRemoteServiceBinder=newIRemoteService.Stub(){
  26. @Override
  27. publicintgetPid(){
  28. Log.i(TAG,"RemoteService---->IRemoteService&getPid()");
  29. returnProcess.myPid();
  30. }
  31. @Override
  32. publicvoidbasicTypes(intanInt,longaLong,booleanaBoolean,
  33. floataFloat,doubleaDouble,StringaString)
  34. throwsRemoteException{
  35. }
  36. @Override
  37. publicStringgetName(){
  38. Log.i(TAG,"RemoteService---->IRemoteService&getName()");
  39. return"RemoteServicediaomao......";
  40. }
  41. };
  42. @Override
  43. publicIBinderonBind(Intentintent){
  44. Log.i(TAG,"RemoteService---->onBind");
  45. if(IRemoteService.class.getName().equals(intent.getAction())){
  46. returnmRemoteServiceBinder;
  47. }else{
  48. returnnull;
  49. }
  50. }
  51. @Override
  52. publicvoidonCreate(){
  53. Log.i(TAG,"RemoteService---->onCreate");
  54. //this.mHandler.sendEmptyMessage(REPORT_MSG);
  55. }
  56. @Override
  57. publicvoidonDestroy(){
  58. Log.i(TAG,"RemoteService---->onDestroy");
  59. //this.mHandler.removeMessages(REPORT_MSG);
  60. }
  61. @Override
  62. publicintonStartCommand(Intentintent,intflags,intstartId){
  63. Log.i(TAG,"RemoteService---->onStartCommand");
  64. returnsuper.onStartCommand(intent,flags,startId);
  65. }
  66. }

IRemoteService.aidl:

        
  1. packagecom.example.remoteservicebind;
  2. interfaceIRemoteService{
  3. intgetPid();
  4. StringgetName();
  5. voidbasicTypes(intanInt,longaLong,booleanaBoolean,
  6. floataFloat,doubleaDouble,StringaString);
  7. }

图片来源于<>一书

本文出自 “让梦冬眠” 博客,谢绝转载!

更多相关文章

  1. springmvc服务端+android客户端的文件上传
  2. Android腾讯微薄客户端开发十:博主广播篇
  3. java后台接收android客户端通过http方式发送的数据
  4. android客户端与web服务端的数据通信
  5. Android中从服务器端向客户端传数据
  6. android远程更新客户端
  7. Android与Java AIO实现简单Echo服务器与客户端
  8. 在Android上使用Http客户端的选择(译文)

随机推荐

  1. Intent Server Environment
  2. android中获取SHA1的代码
  3. android 网络
  4. Android中声音处理流程
  5. android中重写onTouchEvent分别实现点击
  6. android渲染网页时onPageFinished不触发
  7. Android 自定义View 横向翻页
  8. Android圆环形自定义进度条控件的绘制
  9. Android软键盘弹出不影响布局的方法
  10. android查看每个app的内存占用情况