博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android AIDL 一探究竟
阅读量:7091 次
发布时间:2019-06-28

本文共 1998 字,大约阅读时间需要 6 分钟。

AIDL ---(Android Interface Definition Language)Android接口定义语言

  简述:

1、什么时候使用?

通信方式 使用场景
AIDL IPC 、多个应用程序、多线程
Binder IPC 、多个应用程序
Messenger IPC
注:  IPC --- (Inter-Process communication)进程间通信/跨进程通信

 

 

 

     

 

2、如何实现 AIDL 通信?

   下面是项目目录结构图:客户端与服务端代码要保证 aidl 文件夹下内容的一致

    步骤①:创建一个AIDL文件. (在服务端)

1 // IMyAidlInterface.aidl 2 package com.anglus.aidl; 3  4 // Declare any non-default types here with import statements 5  6 interface IMyAidlInterface { 7     /** 8      * Demonstrates some basic types that you can use as parameters 9      * and return values in AIDL.10      */11 //    计算两个数的和12     int add(int num1, int num2);13 }

    步骤②:实现自定义的AIDL 接口文件(在服务端)

  public class IRemoteService extends Service {    @Override    public IBinder onBind(Intent intent) {        return mIBinder;    }    private IBinder mIBinder = new IMyAidlInterface.Stub() {        @Override        public int add(int num1, int num2) throws RemoteException {            Log.i("IRemoteService", "收到远程的请求,传入的参数是:" + num1 + "和" + num2);            return num1 + num2;        }    };}

       一定不要忘了在 AndroidManifest.xml 文件中注册服务:

  

     步骤③: 绑定服务,得到远程服务对象,即可在客户端进行使用。

1   private void bindService() { 2         // 绑定到服务 3         Intent intent = new Intent(); 4         intent.setComponent(new ComponentName("com.anglus.aidl", 5                 "com.anglus.aidl.IRemoteService")); 6         bindService(intent, conn, Context.BIND_AUTO_CREATE); 7     } 8  9     private ServiceConnection conn = new ServiceConnection() {10         @Override11         public void onServiceConnected(ComponentName name, IBinder service) {12             // 拿到远程服务13             iMyAidlInterface = IMyAidlInterface.Stub.asInterface(service);14         }15 16         @Override17         public void onServiceDisconnected(ComponentName name) {18             // 回收资源19             iMyAidlInterface = null;20         }21     };

       注意:在 new ComponetName() 中,第一个参数是:服务端的 项目包名;第二个参数是:要绑定的服务 包名 + 类名

     

 

转载于:https://www.cnblogs.com/jesonjason/p/5958407.html

你可能感兴趣的文章
Win7x64安装了DroidPilot-Win64.exe之后跑不起来 -- 解决办法
查看>>
VS2010 中C++ 和C# 颜色转化
查看>>
java 自带的工具
查看>>
CentOS 7配置MariaDB允许指定IP远程连接数据库
查看>>
计算机基础——指令与程序
查看>>
用三段 140 字符以内的代码生成一张 1024×1024 的图片<转载>
查看>>
HTML CSS
查看>>
sqlserver存储过程中SELECT 与 SET 对变量赋值的区别
查看>>
【分享】开源富文本编辑器之间的较量
查看>>
logback的使用和logback.xml详解
查看>>
Android Studio -- 关联源码
查看>>
leetcode Majority Element
查看>>
去除sql的前后半角全角空格
查看>>
图片在容器里水平垂直居中
查看>>
015PHP文件处理——文件处理flock 文件锁定 pathinfo realpath tmpfile tempname
查看>>
关系型数据库之MySQL
查看>>
算法笔记-二叉树
查看>>
编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,并输出计算结果总是100的所有可能性。...
查看>>
Java异常处理课后作业
查看>>
hrtf 旋转音效matlab实现
查看>>