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

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


详细代码例如以下:
package com.jiaruihua.service.demo;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder; public class AlipayService extends Service { @Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub System.out.println("远程服务已绑定");
<span style="color:#ff0000;">//注意此处要返回我们的IBinder</span>
return new MyBinder();
}
@Override
public boolean onUnbind(Intent intent) {
// TODO Auto-generated method stub
System.out.println("远程服务已解除");
return super.onUnbind(intent);
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
System.out.println("远程服务已创建");
super.onCreate();
} @Override
public void onDestroy() {
// TODO Auto-generated method stub
System.out.println("远程服务已销毁");
super.onDestroy();
}
/*
*<span style="color:#ff0000;">此处是远程所要调用的方法,功能处理在此处</span>
* 支付操作
*/
public void payMoney(){ System.out.println("支付操作"); }
/*
*此处须要一个Iservice.Stub,这是我们定义的Iservice.aidl,所实现的,见第二步
* Iservice.Stub 已经实现Binder
*/
public class MyBinder extends <span style="color:#ff0000;">Iservice.Stub</span>{ @Override
public void callMethodService() {
payMoney(); } } }

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




代码例如以下:

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

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:调用远程服务

package com.example.mygameapp;

import com.jiaruihua.service.demo.Iservice;

import android.app.Activity;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.view.View;
import android.view.View.OnClickListener; public class MainActivity extends Activity { private Intent intent; private Iservice iservice; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); intent = new Intent();
<span style="color:#ff0000;">// 此处的action 必须和你在调用的程序里设置的action 一至</span>
intent.setAction("com.jiaruihua.ServicePay"); // 绑定服务
findViewById(R.id.banding).setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
<span style="color:#ff0000;">// 绑定服务 开启服务</span>
bindService(intent, new MyConn(), BIND_AUTO_CREATE);
}
});
<span style="color:#ff0000;">// 调用远程方法</span>
findViewById(R.id.callmethod).setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
try {
iservice.callMethodService();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
} private class MyConn implements ServiceConnection {
// 成功绑定
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
<span style="color:#ff0000;">// 将sercicse 转换成Iservice接口类型
iservice = Iservice.Stub.asInterface(service);</span>
} @Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub } } }



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. qt 线程简单学习

    QThread线程,只需继承QThread类,并重载run方法,之后就可以使用了. #ifndef THREAD_H #define THREAD_H #include <QThread> ...

  2. HTML5新增的非主体元素header元素、footer元素、hgroup元素、adress元素

    ---恢复内容开始--- header header元素是一种具有引导和导航作用的结构元素,通常用来放置整个页面或页面内的一个内容区块的标题,但是也可以包含其他内容,例如数据表格.搜索表单或相关的lo ...

  3. 免费开源《OdooERP系统部署架构指南》试读:第一章 Odoo架构概述

    文/开源智造联合创始人老杨 本文来自<OdooERP系统部署架构指南>的试读章节.书籍尚未出版,请勿转载.欢迎您反馈阅读意见. 从web浏览器到PostgreSQL,多层与其他层交互以处理 ...

  4. Mac系统下VirtualBox装Centos7设置静态IP并连网

    用Virtualbox装了三台Centos7,现在需要设置成三台之间可以相互通信,并且三台都可以连外网. 需求如下: 1. 三台内部相互通信 2. 可以上外网 3. 主机可以虚拟机可以相互通信(she ...

  5. java常见问题集锦

    Eclipse 编译错误 Access restriction:The type *** is not accessible due to restriction on... 解决方案 Eclipse ...

  6. 如何解决安装istio后istioctl命令每次使用都需要重新配置路径

    Kubernetes在安装istio后初次使用istioctl命令时会提示istioctl command not found 这时候如果在istio文件夹的根目录下配置 export PATH=$P ...

  7. HDU1686 计算模式串匹配的次数

    题目大意: 输入一个T,表示有T组测试数据: 每组测试数据包括一个字符串W,T,T长度大于W小于1000000,w长度小于10000,计算W匹配到T中成功的次数: 这题很明显要用KMP算法,不然很容易 ...

  8. C#中对字符串的加密和解密

    加密: /// <summary> /// 对字符串进行加密 /// </summary> /// <param name="proclaimText" ...

  9. CodeForces - 754B Ilya and tic-tac-toe game

    简单搜索 判断是否能在最后一步下棋得到胜利 问题转化为 是否有可以胜利的x的摆法 那么就只有两种情况 1.有两个x相连 并且 在端点还有.可以落子 那么就可以在最后一步 胜利 2.两个x中间恰好有一个 ...

  10. 视图中 jquery 使用data属性

    示例:<input id='username' data-id="{$val['id']}" data-userName="{$val['name']}" ...