0

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」プロパティを削除すると、同じコードでこのエラーが発生しなくなります。

これは、アプリとサービスを異なるプロセスで実行することに関連する問題だと思いますが、正確な原因を突き止めることはできません。何か案は?

4

1 に答える 1

1

最後に私はそれを理解しました。Context.startService() が非同期呼び出しであるため、内部クラッシュ/null ポインター例外が発生していました。onStartCommand() がいくつかのタスクを実行している間、serviceObj で並行して呼び出されたメソッドがクラッシュしていました。これは、onStartCommand() で行われていた最初の初期化が必要だったためです。

于 2013-11-01T17:22:14.413 に答える