В проекте андроида у меня есть функция foo, которая должна выполнять последовательность операций в последовательности. Внутри foo я бы хотел вызвать showDialog, чтобы отобразить диалог и подождать. Затем из showDialog, когда пользователь нажимает на запись, я бы , как диалог, чтобы уведомить() функцию foo, чтобы она продолжалась. Я не хочу, чтобы foo продолжал выполнение до тех пор, пока диалоговое окно не сообщит об этом. До сих пор я придумали, после чего по какой-то причине, кажется, не работает:Android: синхронизация потоков: ожидание закрытия диалогового окна
class FooActivity {
synchronized void foo(String param) {
try {
showDialog(DIALOG_SELECT_FOO);
wait();
doNextThing(param);
}
} catch (Exception e) { }
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_SELECT_FOO:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// ...
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
synchronized(FooActivity.this) {
FooActivity.this.notify();
}
}
});
return builder.create();
}
// should never get here
return null;
}
}
В принципе, я не вижу диалог на всех. Я думаю, что это потому, что wait() вызывается до того, как диалог получит шанс запустить. Выполняется ли диалог на тем же потоком, что и вызывающий? Любая идея о том, как исправить этот код?
Спасибо,
Джон Goche