zoukankan      html  css  js  c++  java
  • Android进阶AIDL使用自定义类型

    原文首发于微信公众号:jzman-blog,欢迎关注交流!

    上篇文章中主要介绍从 AIDL 的使用方式以及 Android 开发中不同进程之间的通信,遗留的问题是如何在 AIDL 中使用自定义类型,具体步骤如下:
    1. 创建自定义类型
    2. 声明自定义类型
    3. 定义与自定义类型相关的业务
    4. 重写业务实体类
    5. 远程调用
    6. 验证 AIDL

    1. 创建自定义类型

    自定义类型传输的就是一个实体对象,这个实体类必须实现 Parcelable 接口,具体如下:

    // 自定义类型
    public class Work implements Parcelable {
        private String title;
        private String content;
        // getter、setter、Parcelable 省略
    }

    2. 声明自定义类型

    创建一个 .aidl 文件声明刚才定义的类型,注意与具体业务 .aidl 文件的不同,声明具体如下:

    // 在.aidl文件中声明自定义类型
    package com.manu.aidldemo;
    parcelable Work;

    3. 定义与自定义类型相关的业务

    在定义具体业务的 .aidl 文件中定义与自定义类型相关的业务,具体如下:

    // Declare any non-default types here with import statements
    import com.manu.aidldemo.Work; //注意
    interface IPersonAidlInterface {
        //定义与自定义类型相关的业务
        Work getWorkInfo();
        void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
                double aDouble, String aString);
    }

    注意:导入自定义类型,否则不识别。

    4. 重写业务实体类

    由于新增了具体业务,也就是 getWorkInfo() ,需要具体业务类里面实现具体的业务,具体如下:

    //新增自定义类型相关的业务
    @Override
    public Work getWorkInfo() throws RemoteException {
        Work work = new Work();
        work.setTitle("学习AIDL");
        work.setContent("Android developer");
        return work;
    }

    5. 远程调用

    绑定 Service 成功之后会得到 IBinder 对象,然后通过 asInterface() 获取到 IPersonAidlInterface 对象就可以调用了,具体如下:

    public void callRemoteClick(View view) {
        Log.i(TAG,"远程调用具体服务...");
        try {
            //远程调用
            Work work = iPersonAidlInterface.getWorkInfo();
            System.out.println("这是远程调用的服务信息:title="+work.getTitle()+",content="+work.getContent());
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }

    6. 验证 AIDL

    日志运行截图如下:

    使用流程实际上在上篇文章中已经阐述清楚了,这篇貌似有点多余,不过算是对过去知识的总结吧!

    如果觉得写的不妥,可以关注公众号:jzman-blog,一起交流学习。
    这里写图片描述

  • 相关阅读:
    SpringBoot整合SpringDataJPA,今天没啥事情就看了一下springboot整合springdataJPA,实在是香啊,SQL语句都不用写了
    SpringMVC+Spring+Mybatis整合
    开源的分布式事务框架 springcloud Alibaba Seata 的搭建使用 一次把坑踩完。。。
    spring cloud Alibaba --sentinel组件的使用
    springcloud整合config组件
    springcloud整合geteway网关服务
    springcloud组件之hystrix服务熔断,降级,限流
    干货 springcloud之 poenFeign的使用
    springcloud组件之注册中心eureka学习
    面试题---->线程的入门,读完可以应付一般的面试(管理员不要移除我的随笔啊)
  • 原文地址:https://www.cnblogs.com/jzmanu/p/10284782.html
Copyright © 2011-2022 走看看