美文网首页
aidl学习

aidl学习

作者: Thor_果冻 | 来源:发表于2019-01-03 15:21 被阅读0次

aidl学习

跨进程如何传递数据

  • 两个进程无法直接通信
  • 通过android系统底层间接通信

AIDL:android interface definition language

android接口定义语言
慕课网视频学习地址

默认支持数据类型

  • 基本数据类型
  • String,CharSequence
  • List,Map
  • Parcelable

步骤

如需使用 AIDL 创建绑定服务,请执行以下步骤:

  • 创建 .aidl 文件
    此文件定义带有方法签名的编程接口。

package com.example.android;
interface IRemoteService {

int getPid();

void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
        double aDouble, String aString);

}
```

  • 实现接口
    Android SDK 工具基于您的 .aidl 文件,使用 Java 编程语言生成一个接口。此接口具有一个名为 Stub 的内部抽象类,用于扩展 Binder 类并实现 AIDL 接口中的方法。您必须扩展 Stub 类并实现方法。

    private final IRemoteService.Stub mBinder = new IRemoteService.Stub() {
    public int getPid(){
        return Process.myPid();
    }
    public void basicTypes(int anInt, long aLong, boolean aBoolean,
        float aFloat, double aDouble, String aString) {
        // Does nothing
    }
    

};
```

  • 向客户端公开该接口
    实现 Service 并重写 onBind() 以返回 Stub 类的实现。

        public class RemoteService extends Service {
    @Override
    public void onCreate() {
        super.onCreate();
    }
    
    @Override
    public IBinder onBind(Intent intent) {
        // Return the interface
        return mBinder;
    }
    
    private final IRemoteService.Stub mBinder = new IRemoteService.Stub() {
        public int getPid(){
            return Process.myPid();
        }
        public void basicTypes(int anInt, long aLong, boolean aBoolean,
            float aFloat, double aDouble, String aString) {
            // Does nothing
        }
    };
    

}
```

调用步骤

调用 IPC 方法
调用类必须执行以下步骤,才能调用使用 AIDL 定义的远程接口:

  • 在项目 src/ 目录中加入 .aidl 文件。
  • 声明一个 IBinder 接口实例(基于 AIDL 生成)。
  • 实现 ServiceConnection。
  • 调用 Context.bindService(),以传入您的 ServiceConnection 实现。
  • 在您的 onServiceConnected() 实现中,您将收到一个 IBinder 实例(名为 service)。调用 YourInterfaceName.Stub.asInterface((IBinder)service),以将返回的参数转换为 YourInterface 类型。
  • 调用您在接口上定义的方法。您应该始终捕获 DeadObjectException 异常,它们是在连接中断时引发的;这将是远程方法引发的唯一异常。
  • 如需断开连接,请使用您的接口实例调用 Context.unbindService()。

步骤未官网上介绍步骤具体跳转官网

相关文章

  • Binder学习(三)通过AIDL分析Binder通信流程

    Binder学习(三)通过AIDL分析Binder通信流程 概述 AIDL (Android Interface ...

  • Android-服务(AIDL通讯)

    本文学习目标 学会使用AIDL与远程服务进行通讯 AIDL介绍 AIDL是Android中IPC(Inter-Pr...

  • Android 进程间通信AIDL(二)

    本文主要来分析一下AIDL实现原理,在Android进程间通信AIDL(一)学习如何使用AIDL时,在Client...

  • Android之Service学习笔记

    前言 本来想学习学习Binder通信机制,在学习的过程中又接触AIDL并开始学习,在AIDL学习过程中看到bind...

  • Android源码分析——从AIDL了解Binder机制

    以AIDL为入口,探究Binder机制的原理 从AIDL了解Binder 前面简单学习了一下AIDL的用法,接下来...

  • AIDL学习

    AIDL AIDL的核心有两点 AIDL是一种跨进程通讯方式这种方式是基于Binder机制来进行的,Binder本...

  • AIDL学习

    (参考)https://www.jianshu.com/p/d1fac6ccee98 1、为什么要有AIDL? “...

  • AIDL学习

    源于《Android开发艺术探索》,作者讲的跨进程通信之AIDL。作者是在同一个moudle下写的aidl,我为了...

  • aidl学习

    aidl学习 跨进程如何传递数据 两个进程无法直接通信 通过android系统底层间接通信 AIDL:androi...

  • AIDL

    AIDL学习笔记AIDL是一门接口定义语言,用于Android进程间交互使用;1、为什么用aidl2、它相对其他I...

网友评论

      本文标题:aidl学习

      本文链接:https://www.haomeiwen.com/subject/vrlplqtx.html