Android系统中aidl的理解和service的添加

本文介绍了Android中AIDL的使用,包括创建aidl接口、服务端和客户端的实现,以及系统服务的添加步骤,如在frameworks下添加aidl文件、创建Service、在SystemServer中注册等。此外,还探讨了getSystemService()的调用流程。AIDL主要用于进程间通信,分为应用层和系统服务通信两种场景。
摘要由CSDN通过智能技术生成

概述

看看官方文档:
AIDL(Android 接口定义语言)与您可能使用过的其他 IDL 类似。 您可以利用它定义客户端与服务使用进程间通信 (IPC) 进行相互通信时都认可的编程接口。 在 Android 上,一个进程通常无法访问另一个进程的内存。 尽管如此,进程需要将其对象分解成操作系统能够识别的原语,并将对象编组成跨越边界的对象。 编写执行这一编组操作的代码是一项繁琐的工作,因此 Android 会使用 AIDL 来处理。

看到这我们就知道了aidl是什么了:Android 接口定义语言。它可以实现一种通信服务ipc。既然是语言,那么都支持什么数据类型?


// IMyAidlTestInterface.aidl
package com.sim.aidlTest;
// Declare any non-default types here with import statements
interface IMyAidlTestInterface {
    /**
     * Demonstrates some basic types that you can use as parameters    
     * and return values in AIDL.
     * /
    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString);
   }

这是由AndroidStudio自动生成的aidl,可以看到aidl支持的基本类型。int,long,boolean,float,double,String。
默认情况下,AIDL 支持下列数据类型:

  • Java 编程语言中的所有原语类型(如 int、long、char、boolean 等等)
  • String
  • CharSequence
  • List
    List 中的所有元素都必须是以上列表中支持的数据类型、其他 AIDL 生成的接口或您声明的可打包类型。 可选择将 List 用作“通用”类(例如,List)。另一端实际接收的具体类始终是 ArrayList,但生成的方法使用的是 List 接口。
  • Map
    Map 中的所有元素都必须是以上列表中支持的数据类型、其他 AIDL 生成的接口或您声明的可打包类型。 不支持通用 Map(如 Map

下面我们来看一下应用层aidl的使用,我认为aidl在使用时主要分为三步:

  1. 创建aidl接口
  2. 创建服务端
  3. 客户端调用

我创建了一个小的demo用来练习aidl的使用,下面是主要的代码:

步骤一:创建aidl接口
package com.sim.aidlTest;// Declare any non-default types here with import statementsinterface IMyAidlInterface {  
  void testMethod();
  }

在接口中我只添加了一个方法。

步骤二:创建服务端

创建一个Service,Service中创建一个类继承AIDL接口中的Stub类并实现Stub中的抽象方法,最后不要忘记在onBind中返回这个类的对象。

public class MyAIDLService extends Service {
       
private static final String TAG = "MyAIDLService";    
private final IMyAidlInterface.Stub mBinder=new IMyAidlInterface.Stub(){        @Override        
public void testMethod() throws RemoteException {            Log.d(TAG,"testMethod: this is myAIDLTest");       
     }    
 };    
 
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值