服务客户端(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. Android读取服务端TXT(JSON格式数据)返回汉字乱码的问题
  2. android 窃听电话
  3. windows系统 android源码下载
  4. Android上传文件到Django服务器
  5. [Android(安卓)Pro] Notification的使用
  6. springmvc服务端+android客户端的文件上传
  7. Android(安卓)手机端与服务端POST数据交互类
  8. Android录制或播放语音消息时关闭其他媒体播放
  9. Android(安卓)学习笔记

随机推荐

  1. Android的事件转递机制
  2. Android实现三级联动下拉框 下拉列表spin
  3. Android(安卓)dumpstate 工具解析
  4. listview自定义背景以及item自定义背景
  5. Android权威编程指南读书笔记(1-2章)
  6. android客户端程序访问服务器端webservic
  7. 《Android开发从零开始》――10. LinearL
  8. android 实现定时器
  9. Deepin Android(安卓)Studio 修改默认源
  10. Android:使用ViewPager实现左右滑动切换图