私は、(クライアント側から)同期方法でいくつかのインテントの送受信を行うライブラリを作りたいと思います。そのため、私の図書館のクライアントは、受信者の実装に気を配る必要はありません。Android - sendBroadcast()とonReceive() - プロセス間通信のための同期ソリューション
ライブラリはインテントをどこかに送り、応答を受け取ります。次に、結果をクライアントに同期して返します。
ユースケースは、インテントを使用して自分のアプリケーション間でデータを転送する場合です。通常はインテントとレシーバを非同期で使用しますが、これはルールの例外です。
提案されている解決策(簡略化!)図書館:
public class Helper {
private Context context;
private BroadcastReceiver tempReceiver;
private int result = 0;
int getResult() {
tempReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Helper.this.result = 1;
}
};
context.registerReceiver(tempReceiver);
context.sendBroadcast(/* ask for smth */);
Thread.sleep(5000);
context.unregisterReceiver(tempReceiver);
return result;
}
}
クライアントがそのように、ライブラリからいくつかのデータを取得したいアプリケーションです:あなたはそれについて
int timeout = 5000;
Helper lib = new Helper(timeout);
lib.getData();
どう思いますか?脅威とは何ですか? getReturn()を呼び出すとブロックされ、GUIスレッドで呼び出すことができないことを理解しています。睡眠解答が受け入れられるかどうかという疑問。
私は本当に 'Thread.sleep'の使用をお勧めしません。 5秒後には、[Handler.postDelayed'](http://goo.gl/rYpyp)を使用してください。 – Jakar
しかし私が知る限り、postDelayedは非同期なので、この例では動作しません。このメソッドは、応答が準備できるまで(ストリームからの読み込みなど)クライアントをフリーズする必要があることに注意してください。 – Kacper86