关于AIDL升级的那些事儿

       AIDL这里就不说怎么用了,想必大家都曾有过这样的需求吧,跨进程通信,比如使用AIDL进行远程绑定第三方的后台服务。

        随着需求的增加,代码的优化,我们常常都会遇到接口不足以满足当前的开发需要的情况,AIDL的接口也一样,这里就需要对接口进行更新了。但估计有些同学就会认为了“AIDL接口更新那还不容易,远端更新后,app端也同步更新一下不就完事!”这种做法确实够“稳”!就是很费程序员。有没有更友好一些、兼容性更高的更新发式呢,答案当然是有的。下面先来一个错误的展示吧:

interface A{
    void testA();
    boolean testB();
}

这里我需要在远端更新一下接口A,在其中新增一个方法void testC(boolean checked):

interface A{
    void testA();
    void testC();
    boolean testB();
}

这样更新其实也没错,就是很费程序员,我们必须也得在App中同步更新这个接口A,不然App的接口A就无法正常调用,有时还会报各种错误,正确的更新方式应该如下:

interface A{
    void testA();
    boolean testB();
    void testC();
}

是不是看起来没什么变化,但这稍微调整了一下这个方法的位置却很重要,据网上查的资料得知,这个AIDL底层的Binder会将接口A中的方法都进行了编号,App中AIDL中方法的编号需要与远端服务的AIDL中方法的编号相对应,这样才可以正常调用AIDL的接口,否则有可能会报异常。如果将新增的方法都放到了最后面,那么前面部分的接口就可以一一对应的了,调用自然也就是正常的,所以,这般的更新远端服务的AIDL的接口,即使App中的AIDL接口没有更新也可以正常运行,达到上下兼容更新的目的,App也就可以根据需要去更新AIDL的接口了。

你可能感兴趣的:(android,kotlin,AIDL,android,aidl)