aidl很常见,笼统来讲就是可以共享另外 一个APP的数据.
最近写了个项目,做平板,发现其他APP没有账号系统,整个平板只有一个主APP有账号系统。使用其他副APP的时候,一定要登录主APP获取主APP里面的登录token然后直接验证。那么这个场景,选择跨进程通信的方法最好就是aidl了。这样的话,对于有很多自己公司定制化产品的APP,可以更好的使用同一套账号系统,主APP登录哪一套账号,主APP里面token失效,副App拿到的token也失效,各种副APP就拿到的是主APP的账号。当然这只是一种思想。下面就写两个demo是怎样进行aidl调用的。
新建类似于主APP的demo,定义为Test
1.首先我们创建一个aidl文件夹,然后拟定一个拟定名称(不一定是包名)。再创建IMyAidlInterface.aidl
在这个aidl文件夹添加一些方法(根据业务逻辑而定)
我们在这个就添加一个getName的方法,返回String类型的。
2.其次我们要创建一个服务,人家是通过绑定你这个服务从而得到的数据返回。
服务继承Service之后,会有一个onBind方法,返回的是null,这时候要自己添加返回new MyBinder,这个MyBinder是自己写的一个内部类继承IMyAidlInterface.Stub的。这样就会返回在IMyAidlInterface定义好的一些方法。比如我getName方法MyService写死返回test字符串。
3.在清单文件添加这个服务的信息
新建Test2用于与Test通信
1.新建aidl文件夹,跟上一步类似,但是要注意的是,aidl底下的路径要跟Test里面定义路径的一样,然后把aidl文件拷贝过来.
2.在Activity里面绑定服务
setPackge和setAction要注意被调用方的路径。包名应该是com.example.test
注意:onServiceConnected回调里面调用iMyAidlInterface = IMyAidlInterface.Stub.asInterface(service);
3.直接去跨进程调用另外APP里面方法返回的数据,打印一下(被调用方的APP保证要先运行,先启动Test,然后启动Test2绑定服务,再调用)
如上图所示例,这样我们就能拿到在test工程里面之前写死的字符串数据了。
这些都是简单的调用,后续写一下不同类型的跨平台调用方式,便于记录。