预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共24页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Android深入了解分析Aidl调用步骤开始上班第一天,老不想工作了,假期感觉还没开始就已经结束了,唉,时间就是这么,新十二个月开始了,即使很不想干正事,没措施,必需干起来,因为后边路还很长,距离六十岁还很远。刚上班也没什么事,复习一下之前东西,看了一下Aidl相关知识,仔细瞅了瞅Aidl调用步骤,这里写篇文章整理一下,帮助大家同时,自己也加深一下印象。对Aidl不太了解童鞋能够先看一下我之前一篇文章,链接以下:案例下载链接:。在上篇文章中我们已经说过了Android中Aidl简单应用及对象传输方法,还包含了在AS中进行Aidl开发会碰到部分问题及决解方法,本篇文章针对使用方法我们不在多说,我们将以传输对象为例深入剖析Aidl具体调用步骤,继续以上文中传输Person对象为例展开,经过本片文章学习你会学到以下相关知识:1.Aidl工作调用步骤;2.Aidl传输对象时修饰符in、out、inout深入了解。3.对实现Parcelable接口对象中需要实现方法深入了解。首先看一下我们要传输对象代码:publicclassPersonimplementsParcelable{privateStringname;privateintage;publicPerson(){}protectedPerson(Parcelin){name=in.readString();age=in.readInt();}publicstaticfinalCreator<Person>CREATOR=newCreator<Person>(){@OverridepublicPersoncreateFromParcel(Parcelin){returnnewPerson(in);}@OverridepublicPerson[]newArray(intsize){returnnewPerson[size];}};publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}@OverridepublicintdescribeContents(){return0;}@OverridepublicvoidwriteToParcel(Parceldest,intflags){dest.writeString(name);dest.writeInt(age);}publicvoidreadFromParcel(Parceldest){name=dest.readString();age=dest.readInt();}@OverridepublicStringtoString(){return"Person{"+"name='"+name+'\''+",age="+age+'}';}}Person类实现了parcelable接口,有两个结构方法,有name、age两个组员变量,编译器能够帮我们生成一个static、finalCREATOR跟writeToParcel()方法,我们自己写readFromParcel()方法,这里切记次序要和writeToParcel()方法一直。下边再看一下我们.aidl文件代码:importcom.jason.aidl.aidldemo.Person;interfaceIMyAidlInterface{StringinPerson(inPersonp);StringoutPerson(outPersonp);StringinOutPerson(inoutPersonp);}这里需要注意我们Person也需要写对应Person.aidl文件,并在build.gradle中配置,具体信息就不介绍了,上篇文章中进行了具体讲解,在这里看到了修饰符in、out、inout,后文会做具体讲解。我们继续看Aidl文件生成对应.java文件一个整体架构。缩略代码以下:publicinterfaceIMyAidlInterfaceextendsandroid.os.IInterface{/***Local-sideIPCimplementationstubclass.*/publicstaticabstractclassStubextendsandroid.os.Binderimplementscom.jason.aidl.aidldemo.IMyAidlInterface{privatestaticfinaljava.lang.StringDESCRIPTOR="com.jason.aidl.aidldemo.IMyAid