0

我正在编写一个使用 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" 属性,我不会使用相同的代码得到这个错误。

我想这是与在不同进程中运行应用程序和服务相关的问题,但无法找出确切原因。有任何想法吗?

4

1 回答 1

1

最后我想通了。由于 Context.startService() 是异步调用,因此发生了一些内部崩溃/空指针异常。当 onStartCommand() 正在执行一些任务时,在 serviceObj 上并行调用的方法崩溃了,因为它需要首先发生一些初始化,这发生在 onStartCommand() 中。

于 2013-11-01T17:22:14.413 回答