zoukankan      html  css  js  c++  java
  • AIDL 服务只支持有限的数据类型(转)

    AIDL 服务只支持有限的数据类型,如果用AIDL服务传递一些复杂的数据就需要做更一步处理,  AIDL 服务支持的数据类型如下:
    1. Java 的原生类型
    2. String 和CharSequence
    3. List 和 Map ,List和Map 对象的元素必须是AIDL支持的数据类型;  以上三种类型都不需要导入(import)
    4. AIDL 自动生成的接口  需要导入(import)
    5. 实现android.os.Parcelable 接口的类.  需要导入(import)。 

    要传递一个需要import 的数据类型的值(如: 实现Parcelable接口的类),除了要建立一个实现Parcelable 接口的类外, 还需要为这个类单独建立一个aidl 文件, 并使用parcelable 关键字进行定义.

    一. 服务器端

    具体步骤如下:

    1.  建立一个IMyService.aidl 文件,代码如下:

    package net .blogjava.mobile.complex.type.aidl;

    import  net.blogjava.mobile.complex.type.aidl.Produce;

    interface  IMyService  {

         Map  getMap(in String  country,  in  Product  product);

         Product  getProduct();

    }

    注意:   如果方法参数的类型不是原生类型,如String,List或自定义实体类,需要使用in、 out或 inout 修饰,in表示这个值被客户端设置; out  表示这个值被服务端设置,inout 表示这个值既被客户端设置,又被服务端设置.

    2. 编写 Product  类,该类是用于传递的数据类型,它实现了Parcelable接口,用于序列化对象,之所以不用java.io.Serializable 接口,是因为Serializable 接口序列化的效率没有Parcelable接口高

    (1)  在Product 类中必须有一个静态常量,常量名必须为CREATOR,而且CREATOR 常量的数据类型必须是Parcelable.Creator

    (2) 在writeToParcel 方法中需要将要序列化的值写入 Parcel 对象

    3.  建立一个Product.aidl 文件,代码: parcelable Product;

    4.  编写一个MyService类

    5.  在AndroidManifest.xml文件中配置MyService 类,代码:

    <service android:name=".MyService">

         <intent-filter><action  android:name="net.blogjava.mobile.complex.type.aidl.IMyService" /></intent-filter>

    </service>

    二.客户端

    首先将IMyService.java和Product.java文件复制到客户端工程(ch08_complextypeaidlclient),然后绑定AIDL服务,并获得AIDL服务对象,最后调用AIDL 服务的方法

    http://blog.csdn.net/aduovip/article/details/6703516 原文

  • 相关阅读:
    设计模式(二):命令模式实例
    设计模式(一):简单工厂实例
    vue中使用base64进行加解密
    vue跨域问题解决(生产环境)
    彩色图像的直方图绘制及灰度图像均衡化
    MySql中添加用户,新建数据库,用户授权,删除用户,修改密码
    python办公入门2:开发准备工作
    python办公入门1:概述
    python菜鸟教程学习9:函数
    python菜鸟教程学习8:迭代器与生成器
  • 原文地址:https://www.cnblogs.com/xilinch/p/2593236.html
Copyright © 2011-2022 走看看