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. 框模型中设置内容区域元素占地尺寸box-sizing属性

    盒子模型有两种 一种是 内容盒子模型(content-box)一种是边框盒子模型(border-box). content-box:设置的尺寸,只设置内容区域, 左外边距+左边框+左内边距+内容区域宽 ...

  2. Shell数值比较

    Shell数值比较 比较 描述 n1 -eq n2 检查n1是否与n2相等 n1 -ge n2 检查n1是否大于或等于n2 n1 -gt n2 检查n1是否大于n2 n1 -le n2 检查n1是否小 ...

  3. 查询SYS_ORG_TB树的层级

    WITH N(SYS_ORG_ID,SYS_ORG_NAME,LEVEL) AS( AS LEVEL FROM SYS_ORG_TB WHERE SYS_ORG_UPID IS NULL UNION ...

  4. django实现github第三方本地登录

    1.安装 pip install social-auth-app-django 2.生成Client ID和Client Secret 3.修改setting.py INSTALLED_APPS = ...

  5. Linux基础测试

    目 录 第1章 文件及目录课后作业    1 第2章 Linux打包与压缩习题    1 第3章 Linux系统VIM编辑器习题    1   文件及目录课后作业 从/proc/meminfo中过滤出 ...

  6. Python中比元组更好用的namedtuple

    一.思考 1.什么是元组? 不可变的序列类型 "不能修改的列表" 2.元组支持哪些操作? 元组是序列类型,支持序列类型的所有操作 通过索引取值 one_tuple = (" ...

  7. POJ 2377 (并查集+sort求最远路)

    Description Bessie has been hired to build a cheap internet network among Farmer John's N (2 <= N ...

  8. 完善的IaaS云服务的个人理解

    此文已由作者王盼授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 前情提要 本文仅讨论云主机(虚拟机).云硬盘(块存储).云网络(普通虚拟网络或SDN)相关的IaaS服务,相关 ...

  9. 大数据学习——linux常用命令(四)

    四 查到命令 1 查找可执行的命令所在的路径 which ls 查ls命令所在的路径 2 查找可执行的命令和帮助的位置 whereiis ls 3 从某个文件夹开始查找文件 find / -name ...

  10. html5的新通讯技术socket.io,实现一个聊天室

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...