(いくつかのクライアント アプリで使用される AIDL インターフェースを備えたリモートサービスがあります。時間がかかる呼び出し用のインターフェースに非同期メソッドを追加したいのですが、ソリューションをセキュアにする必要があります。サービスと通信できます. クライアント アプリケーションはサービス アプリと同じ署名で署名されています. 現在、アプリは単にサービスにバインドし、単一のインターフェイス メソッドを呼び出してさまざまな操作を実行します.
1 つのオプションは、操作が完了したときにサービスから Intent をブロードキャストし、クライアント アプリケーションで BroadcastReceiver を使用することですが、(質問 #1 ) 私のアプリだけが Intent を受信できるようにする方法でこれを行うことはできますか? setPackage() はこれを行うようですが、Gingerbread デバイスをサポートする必要があります。これは、こちらの回答によると、そのアプローチを除外しているようです:
したがって、クライアントによって実装された、サービスが使用するコールバック インターフェイスを備えた 2 つ目の .aidl インターフェイスを追加する必要があるようです。ここでリスナーを使用する例を見てきましたが、引数として 2 番目のインターフェイス オブジェクトを渡すだけのクライアントとの違いはわかりません (この回答の IScript / IScriptResult の例で使用されているように: Service call backs to activity inアンドロイド)
質問 #2、ここでリスナーを使用することと、コールバック メソッドを使用することの利点は何ですか?