我在开头的AIDL文件中添加新方法时的奇怪行为

时间:2013-12-02 12:05:43

标签: android aidl

我有AIDL文件(methodA,methodB)作为我的android项目的一部分。我在文件的开头添加了一个新方法(methodC)并构建了项目,在客户端我没有更新/替换到新的AIDL文件。

现在,当我从客户端调用methodA时,它在服务器端调用methodC。我不明白映射是如何发生的。

有人可以解释这种行为吗?

client side file:      serverside file:
methodA                 methodC 
methodB                 methodA
                        methodB

2 个答案:

答案 0 :(得分:0)

实际上,答案很简单。编译AIDL期间的方法接收增量标识符。粗略地说,在编译客户端方法的AIDL文件时,接收到的标识符等于1,方法B - 2.同样,在服务器端,在编译方法期间,接收到的标识符等于1,方法B - 2.当您更新AIDL文件时服务器并将methodC放在接口的开头,在编译期间,此方法C接收到的标识符等于1.因此,当您的客户端调用methodA时,您更新的服务器会收到一个命令来执行标识符等于1的方法,现在是methodC。

答案 1 :(得分:0)

您的方法是通过交易号码来调用,而不是通过名称来调用。 事务编号在构建文件夹中自动生成的.java中自动生成。方法的数字按照方法会议的顺序生成。 因此,如果要向aidl文件添加新方法并且不在所有应用程序中更新此文件,请将此方法放在文件末尾。

做这样的事情:

client side file:      serverside file:
methodA                 methodA 
methodB                 methodB
                        methodC
                        methodD

在这种情况下,来自客户端的方法A和B将在服务器端调用正确的方法,因为它们将具有相同的交易号