Aidl实现的一个例子

本文探讨了AIDL与Messenger在跨进程调用中的异同。AIDL返回值同步,每个请求在Service中由新线程处理,涉及线程安全问题。而Messenger则在主线程进行消息处理,采用异步方式。AIDL支持的基本类型、List和Map等,并需要导入相关类。通过实例展示了AIDL的使用步骤,包括Service端和Client端的操作。同时强调了AIDL服务端代码在新线程执行,以及客户端应避免在主线程调用以防止阻塞。
摘要由CSDN通过智能技术生成

AIDL 与 Messenger的异同

对于跨进程的调用

AIDL返回值是同步的,而Messenger是异步的。Aidl调用service的方法,会等待直到service中的方法执行完毕。

AIDL在Service中会针对每个请求开启新线程来执行客户端的调用。而Messenger会把消息放在主线程的队列里。

AIDL的实现,要注意线程安全的实现

oneway 关键字

修饰远程调用:

远程调用不会阻塞,它只是发送食物数据并立即返回

修饰本地进程:

不会有任何影响,调用仍是同步调用

AIDL支持的类型

  1. Java编程语言的原生基本类型 int、long、char、boolean
  2. String
  3. CharSequence
  4. List
    • List中的所有元素必须是上面支持的类型
    • 另一端实际接受的具体类型始终是ArrayList
  5. Map
    • Map中所有的元素都必须是上面支持的类型
    • 另一端实际接收的具体类始终是HashMap接口

必须为上面每个类加入import语句

一个AIDL的例子

Service端

1、编写AIDL的文件

// IAidlService.aidl
package com.jue.testservice1;
interface IAidlService {
    String getName(int num);
}

2、添加AndroidManifest文件

<service android:name=".AidlService" android:process=":AidlService" android:exported="true" android:enabled="true" >

    <intent-filter>
        <action andr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值