Что ж, пожалуйста, не спрашивайте меня, почему, но мне нужно начать синхронную и блокирующую активность, чтобы выполнение программы не продолжалось до его завершения.Я знаю, как сделать синхронный диалог, но как я могу выполнить синхронное действие?
Ниже приведены два подхода, которые я попробовал, но не смог:
// In the 1st activity, start the 2nd activity in the usual way
startActivity(intent);
Looper.loop(); // but pause the program here
// Program continuse running afer Looper.loop() returns
....
// Then, in the second activity's onBackPressed method:
public void onBackPressed() {
// I was hoping the following quit() will terminate the loop() call in
// the first activity. But it caused an exception "Main thread not allowed
// to quit." Understandable.
new Hanlder().getLooper().quit();
}
Я также пытался использовать другой поток, чтобыдостигните этого:
// In the first activity, start a thread
SecondThread m2ndThread = new SecondThread(this);
Thread th = new Thread(m2ndThread, "Second Thread");
th.run();
synchronized(m2ndThread) {
m2ndThread.wait();
}
class SecondThread implements Runnable {
Activity m1stActivity;
SecondThread(Activity a) {
m1stActivity = a;
}
public void run() {
Looper.prepare();
Handler h = new Handler() {
public void handleMessage() {
Intent intent = new Intent(m1stActivity, SecondActivity.class);
m1stActivity.startActivity(intent); // !!!!!!!!!!!!!!
}
}
h.sendEmptyMessage(10); // let it run
Looper.quit();
}
}
Однако этот подход не работает, потому что, когда я использую 1-е действие для запуска 2-го действия, основной поток уже находится в состоянии ожидания и ничего не делает.Таким образом, второе действие даже не было создано.(Это иронично: вы должны использовать занятие, чтобы начать занятие, но как вы можете это сделать, когда оно уже находится в состоянии ожидания?)