リモートサービスに接続するモジュールを作成したい。
このモジュールは、開発者がアプリで特定の(Bluetooth-)ハードウェアに接続するために使用できます。次に、市場で個別に更新できる単一のリモートサービスに接続する必要があります。
リモートサービスは、同時に使用するすべてのアプリに対して単一のスレッドしか許可されていないため(Bluetooth経由の接続は1つのみ)、AIDLではなくメッセンジャーアプローチを選択しました。
私の問題は、パブリックAPIで同期メソッドを提供したかったのですが、サービスがハンドラーで返されることです。私が理解している限り、ハンドラーは常に現在のタスクが終了するのを待ちます...別のスレッドで答えを得る方法は?
私が望む同期メソッドのコード:
responseDataSync = new Sync<ResponseData>();
// Send message
Message msg = Message.obtain(null, Constants.DATA, 1, 0);
send(msg);
try {
ResponseData responseData = responseDataSync.get();
// with responseDataSync using a countdown latch to synchronize...
// but it never fires thanks to the handler.
//etc...
前もって感謝します。私の質問がある程度理解できたと思います...;)
/ EDIT:サーバーからデータを返すメソッドが必要です。お気に入り
public ResponseData returnResponse(Data dataToSend)
しかし、ハンドラーが戻るのを妨げるスレッドでスタックしているため、サービスが戻るのを待つことができません...