android进阶-AIDL之自定义数据类型

系列文章

AIDL-基本使用
AIDL-自定义数据类型
AIDL-修饰符in,out,inout
AIDL-重连方法
AIDL-接口注册/解注册
AIDL-连接池

知识点

  1. aidl使用自定义类型传递数据

一、aidl使用自定义类型传递数据

  1. 定义自定义数据类型并实现Pracelable接口
public class AIDLBook implements Parcelable {

    public String name;
    public int id;
   //实现接口过程省略
   ....
   ....
   ....
}
  1. 创建自定义数据类型的AIDL文件,并添加实现了Pracelable的类
// AIDLBook.aidl
package com.returntolife.jjcode.mydemolist.bean;

// Declare any non-default types here with import statements
parcelable AIDLBook;

这里创建AIDL对应数据类型的时候,一定要注意包名的路径要与java文件的路径一致,如demo中所示:


image.png
  1. 在需要使用到该类型的AIDL接口中导入该类型
// IPerson.aidl
package com.returntolife.jjcode.mydemolist;

// Declare any non-default types here with import statements
import com.returntolife.jjcode.mydemolist.bean.AIDLBook;

interface IPerson {
    /**
     * Demonstrates some basic types that you can use as parameters
     * and return values in AIDL.
     */
    void  setName(String s);
    String  getName();

    void setBook(in AIDLBook book);
    AIDLBook getBook();
}
  1. 后面的过程就和之前第一篇AIDL的基本使用的使用一致

  2. 其他注意事项
    如果在同进程中使用自定义数据类型AIDL进行通信,其传递的数据对象内存地址是一致的;
    而如果像Demo中修改了service的进程号来模拟跨进程的时候,每次getBook()回来的对象地址都是不一样的,这个一定要特别注意,在后面讲解注册接口与解注册接口也会涉及到
    另外,setBook()和getBook()方法是运行在binder线程中的,所以我们如果担心耗时问题,往往是放在子线程中调用aidl接口的方法


总结

aidl所提供的基本类型数据往往是不够我们开发中所用的,而自定义数据类型我们就要多注意对象的地址,避免引用问题,另外还有就是接口的调用要分清是否是运行在Binder线程中,避免出现方法耗时而导致应用出现ANR或者卡顿问题

Demo地址

https://github.com/returntolife455/DemoList

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容