android 不同进程间的调用  AIDL 实现通讯服务

      近期对aidl android 不同进程间的调用,不同运用间的调用做了一些尝试:
过程例如以下:
1:首先在要被调用的程序里写好服务service


详细代码例如以下:
  1. package com.jiaruihua.service.demo;
  2.  
  3. import android.app.Service;
  4. import android.content.Intent;
  5. import android.os.Binder;
  6. import android.os.IBinder;
  7.  
  8. public class AlipayService extends Service {
  9.  
  10. @Override
  11. public IBinder onBind(Intent intent) {
  12. // TODO Auto-generated method stub
  13.  
  14. System.out.println("远程服务已绑定");
  15. <span style="color:#ff0000;">//注意此处要返回我们的IBinder</span>
  16. return new MyBinder();
  17. }
  18. @Override
  19. public boolean onUnbind(Intent intent) {
  20. // TODO Auto-generated method stub
  21. System.out.println("远程服务已解除");
  22. return super.onUnbind(intent);
  23. }
  24. @Override
  25. public void onCreate() {
  26. // TODO Auto-generated method stub
  27. System.out.println("远程服务已创建");
  28. super.onCreate();
  29. }
  30.  
  31. @Override
  32. public void onDestroy() {
  33. // TODO Auto-generated method stub
  34. System.out.println("远程服务已销毁");
  35. super.onDestroy();
  36. }
  37. /*
  1. *<span style="color:#ff0000;">此处是远程所要调用的方法,功能处理在此处</span>
  2. * 支付操作
  3. */
  4. public void payMoney(){
  5.  
  6. System.out.println("支付操作");
  7.  
  8. }
  9. /*
  1. *此处须要一个Iservice.Stub,这是我们定义的Iservice.aidl,所实现的,见第二步
  2. * Iservice.Stub 已经实现Binder
  3. */
  4. public class MyBinder extends <span style="color:#ff0000;">Iservice.Stub</span>{
  5.  
  6. @Override
  7. public void callMethodService() {
  8. payMoney();
  9.  
  10. }
  11.  
  12. }
  13.  
  14. }

2:创建上一步中须要一个Iservice.aidl文件




代码例如以下:

  1. package com.jiaruihua.service.demo;
  2. //aidl 接口定义不须要訪问修饰符 默认公共
  3.  
  4. interface Iservice {
  5. void callMethodService();
  6. }

eclipse中的gen文件夹中会自己主动创建 Iservice.java文件

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamlhcnVpaHVhX2Jsb2c=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

3:在mainfest.xml文件里注冊Iservice

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamlhcnVpaHVhX2Jsb2c=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

4:在另外一个须要调用的程序中创建一个包,注意此处的包名要和 上面mainfest.xml中service的指定包名一致;
让后将上面第二步创建的Iservice.aidl文件拷贝过来



5:调用远程服务

  1. package com.example.mygameapp;
  2.  
  3. import com.jiaruihua.service.demo.Iservice;
  4.  
  5. import android.app.Activity;
  6. import android.app.Service;
  7. import android.content.ComponentName;
  8. import android.content.Intent;
  9. import android.content.ServiceConnection;
  10. import android.os.Bundle;
  11. import android.os.IBinder;
  12. import android.os.RemoteException;
  13. import android.view.View;
  14. import android.view.View.OnClickListener;
  15.  
  16. public class MainActivity extends Activity {
  17.  
  18. private Intent intent;
  19.  
  20. private Iservice iservice;
  21.  
  22. @Override
  23. protected void onCreate(Bundle savedInstanceState) {
  24. super.onCreate(savedInstanceState);
  25. setContentView(R.layout.activity_main);
  26.  
  27. intent = new Intent();
  28. <span style="color:#ff0000;">// 此处的action 必须和你在调用的程序里设置的action 一至</span>
  29. intent.setAction("com.jiaruihua.ServicePay");
  30.  
  31. // 绑定服务
  32. findViewById(R.id.banding).setOnClickListener(new OnClickListener() {
  33.  
  34. @Override
  35. public void onClick(View arg0) {
  36. <span style="color:#ff0000;">// 绑定服务 开启服务</span>
  37. bindService(intent, new MyConn(), BIND_AUTO_CREATE);
  38. }
  39. });
  40. <span style="color:#ff0000;">// 调用远程方法</span>
  41. findViewById(R.id.callmethod).setOnClickListener(new OnClickListener() {
  42.  
  43. @Override
  44. public void onClick(View arg0) {
  45. // TODO Auto-generated method stub
  46. try {
  47. iservice.callMethodService();
  48. } catch (RemoteException e) {
  49. // TODO Auto-generated catch block
  50. e.printStackTrace();
  51. }
  52. }
  53. });
  54. }
  55.  
  56. private class MyConn implements ServiceConnection {
  57. // 成功绑定
  58. @Override
  59. public void onServiceConnected(ComponentName name, IBinder service) {
  60. <span style="color:#ff0000;">// 将sercicse 转换成Iservice接口类型
  61. iservice = Iservice.Stub.asInterface(service);</span>
  62. }
  63.  
  64. @Override
  65. public void onServiceDisconnected(ComponentName name) {
  66. // TODO Auto-generated method stub
  67.  
  68. }
  69.  
  70. }
  71.  
  72. }



android 不同进程间的调用 AIDL 实现通讯服务的更多相关文章

  1. Android Binder 进程间通讯机制梳理

    什么是 Binder ? Binder是Android系统中进程间通讯(IPC)的一种方式,也是Android系统中最重要的特性之一.Binder的设计采用了面向对象的思想,在Binder通信模型的四 ...

  2. 一篇文章了解相见恨晚的 Android Binder 进程间通讯机制【转】

    本文转载自:https://blog.csdn.net/freekiteyu/article/details/70082302 Android-Binder进程间通讯机制 概述 最近在学习Binder ...

  3. android IPC 进程间通讯

    参考资料: http://blog.csdn.net/birdsaction/article/details/39451849 在这里我说一下学习技术的方法,别人的博客,别人的东西,再简单,自己没有写 ...

  4. Android跨进程訪问(AIDL服务)

    我将AndroidAIDL的学习知识总结一下和大家共享 在Android开发中,AIDL主要是用来跨进程訪问. Android系统中的进程之间不能共享内存,因此,须要提供一些机制在不同进程之间进行数据 ...

  5. Android初级教程进程间的通信AIDL

    在介绍跨程序进程间通信AIDL前,先看一下本程序activity与某个服务是怎么绑定在一起进行交互的. 需求:服务有两个方法.分别是播放音乐与停止播放音乐.该程序的活动要访问这两个方法,在activi ...

  6. AIDL进程间调用与Binder的简单介绍

    Binder是安卓中特有的一种进程间通信(IPC)方式,从Unix发展而来的手段,通信双方必须处理线程同步.内存管理等复杂问题,传统的Socket.匿名通道(Pipe).匿名管道(FIFO).信号量( ...

  7. Android菜鸟的成长笔记(22)——Android进程间传递复杂数据(AIDL)

    在上一篇中介绍了Andorid中的进程间的通信方式AIDL,本篇文章将介绍传递复杂数据的AIDL Service 下面通过一个示例说明: 本例子中用到了两个自定义类型:Person与Pet, 其中Pe ...

  8. Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8479282.html 在Android中进程间通信是比较难的一部分,同时又非常 ...

  9. Android跨进程通信AIDL服务

    服务(Service)是android系统中非常重要的组件.Service可以脱离应用程序运行.也就是说,应用程序只起到一个启动Service的作用.一但Service被启动,就算应用程序关闭,Ser ...

随机推荐

  1. vue的使用配置

    我的编辑器是webstorm,虽然占内容占资源, 但是用起来很方便, 刚开始接触的时候就是用这个软件,很喜欢. vue的教程 1.http://www.jianshu.com/p/5ba253651c ...

  2. bzoj 1051 受欢迎的牛-tarjan

    https://www.lydsy.com/JudgeOnline/problem.php?id=1051 如果A喜欢B,那么A->B连边,那么整个图储存下来,如果有好多个牛是受欢迎的,那么他们 ...

  3. c++类流操作运算符的重定义

    对于流操作运算符我们需要注意的是函数的返回类型应该是流输入类型的引用或者流输出类型的引用,因为如果代码是 cout<<a<<b; 我们对a执行完cout函数之后,我们应该再次将 ...

  4. python基础(二) —— 流程控制语句

    编程语言中的流程控制语句分为以下几类: 顺序语句 分支语句 循环语句 其中顺序语句不需要单独的关键字来控制,就是按照先后顺序一行一行的执行,不需要特殊的说明. 下面主要是 分支语句 和 循环语句的说明 ...

  5. 洛谷 P1434 [SHOI2002]滑雪

    这道题适合记忆化练手 毕竟总有些大佬虐题. 这个题有几个剪枝 1.记忆化 这个不用多说了吧 剪枝就是 如果 当前点到下面一个点的目前下降的高度+1 小于 下面那个点 能下降的高度 那么反过来,这个点不 ...

  6. 图论trainning-part-1 D. Going in Cycle!!

    D. Going in Cycle!! Time Limit: 3000ms Memory Limit: 131072KB 64-bit integer IO format: %lld      Ja ...

  7. xtu字符串 C. Marlon's String

    C. Marlon's String Time Limit: 2000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java ...

  8. gitHub网站上常见英语翻译2

    repositories资料库 compilers with rich code analysis APIs.编译器具有丰富的代码分析API. plugins插件 With a variety of ...

  9. Jquery跨域请求

    在JavaScript中,有一个很重要的安全性限制,被称为“Same- Origin Policy”(同源策略).这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaSc ...

  10. 聊聊flink的log.file配置

    本文主要研究一下flink的log.file配置 log4j.properties flink-release-1.6.2/flink-dist/src/main/flink-bin/conf/log ...