service aidl proxy - Android RemoteExceptionsとサービス




1 Answers

リモートオブジェクトをホストしているプロセスがもはや使用できなくなると、RemoteExceptionがスローされます。これは通常、プロセスがクラッシュしたことを意味します。

しかし、これまでのコメントや公式のAndroidのドキュメントでは、DeadObjectExceptionが唯一例外としてクライアントに返されているという点では間違っています。 AIDLサービスの実装でスローされたRuntimeExceptionsのいくつかのタイプは、クライアントに戻され、そこで再スローされます。 Binder.execTransact()メソッドを調べると、RuntimeExceptionがキャッチされ、選択された数少ないものがクライアントに渡されることがわかります。

この特別な扱いを受けたRuntimeExceptionsは以下の通りです。 確認するためにParcel.writeExceptionをチェックすることもできます。 このメソッドは、Binderクラスが例外をParcelにマーシャリングしてクライアントに転送し、Parcel.readExceptionの一部として再スローされます。

  • SecurityException
  • BadParcelableException
  • IllegalArgumentException
  • NullPointerException
  • IllegalStateException
  • NetworkOnMainThreadException
  • UnsupportedOperationException

私は偶然この動作に遭遇しました。クライアント側で予期しない例外が発生しました。IllegalStateExceptionが発生したときにサービスがクラッシュすることはありませんでした。 フルライトアップ: https://blog.classycode.com/dealing-with-exceptions-in-aidl-9ba904c6d63 ://blog.classycode.com/dealing-with-exceptions-in-aidl-9ba904c6d63

intent bundle callback

だから私はAndroid OS用のサービスとアクティビティを書いた。

私のサービスはそれ自身のプロセスで実行されているので、私のアクティビティとサービスの間の通信はすべてIPC経由で行われます。 私はこれに標準のAndroid .aidlメカニズムを使用します。

これまでのところすべて正常に動作します。 しかし、AIDLは "throws RemoteException"を使用してすべてのメソッドスタブを生成するので、それらを処理する必要があります。

私はAndroidのソースコード全体で素早くgrepを行い、この例外が投げられる3つのケースしか見つけられませんでした。 これらは、私が接続していない別のサービスにあります。

理論ではRemoteExceptionsはJNIインターフェースを使って生成できるので、Cソースもチェックしました。何も表示されませんでした。

私は誰もが次のようにそれらを扱うという印象を持っています:

  try {

    mService.someMethodCall (someArguments);

  } catch (RemoteException e) {

    e.printStackTrace();

  }

これは実体のコードではなく、私のコードベースではこのようなことはしたくありません。

それ以外にも、IPC経由でRemoteExceptionをスローしようとしましたが、スタックトレースとシステムログメッセージがあり、例外はまだサポートされていません。 私のアプリケーションは例外を見たことがなく、例外を投げたサービスは非常に奇妙な状態になった(途中で動作する):-(

質問は次のとおりです。

  • これらの例外は今までに投げられるのでしょうか?

  • 誰かがRemoteExceptionをキャッチするtry-catchブロックを見たことがありますか?

  • 「throws RemoteException」がデッドコードであるか、AIDLコンパイラの中に残されているため、それらが存在しないこと、そしてそれらを処理することだけを強制されていることでしょうか?

私はソースコード全体を読んでいません。 私はGrepを使ってRemoteExceptionの出現を見つけましたので、空白の使い方が異なるためにいくつか見逃しているかもしれません。




Related