android 不同进程间的调用 AIDL 实现通讯服务
16lz
2021-01-23
android 不同进程间的调用 AIDL 实现通讯服务
最近对aidl android 不同进程间的调用,不同运用间的调用做了一些尝试: 步骤如下: 1:首先在要被调用的程序里写好服务service![android 不同进程间的调用 AIDL 实现通讯服务_第1张图片](https://img.16lz.com/image/info5/7e9713870d434a61bc6a1e45ab4847e9.png)
具体代码如下:
2:创建上一步中需要一个Iservice.aidl文件
![android 不同进程间的调用 AIDL 实现通讯服务_第2张图片](https://img.16lz.com/image/info5/bc6335e56f0c499b8c435a092db024ce.png)
代码如下:
eclipse中的gen目录中会自动创建 Iservice.java文件![android 不同进程间的调用 AIDL 实现通讯服务_第3张图片](https://img.16lz.com/image/info5/b3feff88d65245caab269c61342985c6.png)
3:在mainfest.xml文件中注册Iservice![android 不同进程间的调用 AIDL 实现通讯服务_第4张图片](https://img.16lz.com/image/info5/caa589b5438b491eb4d06b60e7430ce9.png)
4:在另外一个需要调用的程序中创建一个包,注意此处的包名要和 上面mainfest.xml中service的指定包名一致; 让后将上面第二步创建的Iservice.aidl文件拷贝过来![android 不同进程间的调用 AIDL 实现通讯服务_第5张图片](https://img.16lz.com/image/info5/e11d379822a24542b8bd942cb0ec286b.jpg)
5:调用远程服务
源码demo
最近对aidl android 不同进程间的调用,不同运用间的调用做了一些尝试: 步骤如下: 1:首先在要被调用的程序里写好服务service
![android 不同进程间的调用 AIDL 实现通讯服务_第1张图片](https://img.16lz.com/image/info5/7e9713870d434a61bc6a1e45ab4847e9.png)
具体代码如下:
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 {@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubSystem.out.println("远程服务已绑定");<span style="color:#ff0000;">//注意此处要返回我们的IBinder</span>return new MyBinder();}@Overridepublic boolean onUnbind(Intent intent) {// TODO Auto-generated method stubSystem.out.println("远程服务已解除");return super.onUnbind(intent);}@Overridepublic void onCreate() {// TODO Auto-generated method stubSystem.out.println("远程服务已创建");super.onCreate();}@Overridepublic void onDestroy() {// TODO Auto-generated method stubSystem.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>{@Overridepublic void callMethodService() {payMoney();}}}
2:创建上一步中需要一个Iservice.aidl文件
![android 不同进程间的调用 AIDL 实现通讯服务_第2张图片](https://img.16lz.com/image/info5/bc6335e56f0c499b8c435a092db024ce.png)
代码如下:
package com.jiaruihua.service.demo;//aidl 接口定义不需要访问修饰符 默认公共interface Iservice {void callMethodService();}
eclipse中的gen目录中会自动创建 Iservice.java文件
![android 不同进程间的调用 AIDL 实现通讯服务_第3张图片](https://img.16lz.com/image/info5/b3feff88d65245caab269c61342985c6.png)
3:在mainfest.xml文件中注册Iservice
![android 不同进程间的调用 AIDL 实现通讯服务_第4张图片](https://img.16lz.com/image/info5/caa589b5438b491eb4d06b60e7430ce9.png)
4:在另外一个需要调用的程序中创建一个包,注意此处的包名要和 上面mainfest.xml中service的指定包名一致; 让后将上面第二步创建的Iservice.aidl文件拷贝过来
![android 不同进程间的调用 AIDL 实现通讯服务_第5张图片](https://img.16lz.com/image/info5/e11d379822a24542b8bd942cb0ec286b.jpg)
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;@Overrideprotected 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() {@Overridepublic 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() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubtry {iservice.callMethodService();} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});}private class MyConn implements ServiceConnection {// 成功绑定@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {<span style="color:#ff0000;">// 将sercicse 转换成Iservice接口类型iservice = Iservice.Stub.asInterface(service);</span>}@Overridepublic void onServiceDisconnected(ComponentName name) {// TODO Auto-generated method stub}}}
源码demo
更多相关文章
- Android平台的跨进程通信——AIDL(上)
- Android 查看手机中所有进程
- [android]通讯中常用到的Helper
- Android Native进程内存泄露检测
- Android中使用AlarmManager需注意设置进程属性
- android 通讯录
- Android 多进程学习