我正在使用AIDL编写服务来远程调用方法。我能够成功连接到服务,并在其上调用方法。但是,如果我尝试在onServiceConnected()中调用一个方法,我会得到空指针异常。代码片段如下。
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.v(TAG, "service connected");
serviceObj = <AIDL Interface>.Stub.asInterface(service)
if(serviceObj != null) {
serviceObj.getMyMethod(); // Throws Null Pointer Exception, why???
}
}
此外,在清单中,我在服务标记中定义了以下属性:
android:process=":remote"
但是,如果我在其他地方调用serviceObj.getMyMethods(),就像点击GUI按钮一样,我没有得到这样的错误,并且方法成功返回。另外,如果我删除上面的“:remote”属性,我不会使用相同的代码获得此错误。
我想这是与在不同进程中运行应用和服务相关的问题,但无法找出确切原因。有什么想法吗?
答案 0 :(得分:1)
最后我明白了。由于Context.startService()是异步调用,因此发生了一些内部崩溃/空指针异常。当onStartCommand()执行某些任务时,并行调用serviceObj的方法崩溃了,因为它需要首先在onStartCommand()中进行一些初始化。