android远程服务在一个单独的进程中运行并从onserviceconnected()调用方法

时间:2013-10-31 20:44:44

标签: java service android-service aidl

我正在使用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”属性,我不会使用相同的代码获得此错误。

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

1 个答案:

答案 0 :(得分:1)

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