onReceiveメソッドでバンドルからいくつかの情報を取得するBroadcastReceiverをUIスレッドに登録しています。メインスレッドに進む前に、これらの値が必要です。
これらの値を使用する前に、onReceiveが終了するのを待つ方法はありますか?onReceiveが値を使用しようとした後に値を設定するタイミングの問題が発生しています。スレッドは同じスレッド上にあるため、スレッドをスリープ状態にすることはできません。
レシーバーをAsyncTaskに登録し、メインスレッドでwait()を呼び出し、完了したらonReceive notify()を使用するのは理にかなっていますか?
String a = "hi";
IntentFilter filter = new IntentFilter();
filter.addAction(MY_CUSTOM_INTENT);
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Set the variable values here
a = "bye";
}
};
getApplicationContext().registerReceiver(receiver, filter);
// Get the values, I am getting a = "hi" here because the onReceive code has
// not been reached yet
// How can I guarantee that a = "bye" from this method?
getA();
ここで、メソッドは次のようなものです
String getA() {
return a;
}