AIDL を使用してメソッドをリモートで呼び出すサービスを作成しています。サービスに正常に接続でき、その上でメソッドを呼び出すこともできます。ただし、onServiceConnected() でメソッドを呼び出そうとすると、null ポインター例外が発生します。コードのスニペットを以下に示します。
@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"
ただし、GUI ボタンをクリックするなど、別の場所で serviceObj.getMyMethods() を呼び出すと、そのようなエラーは発生せず、メソッドは正常に返されます。さらに、上記の「:remote」プロパティを削除すると、同じコードでこのエラーが発生しなくなります。
これは、アプリとサービスを異なるプロセスで実行することに関連する問題だと思いますが、正確な原因を突き止めることはできません。何か案は?