我在AsyncTask中运行了一个很长的进程,但它可能需要在处理时确认用户的某些内容。我知道如何显示确认对话框但是如何检索输出并等待使用确认?
this.runOnUiThread(new Runnable() {
public void run() {
boolean output = ConfirmUser(message);
}
});
答案 0 :(得分:3)
我会说这是个坏主意。如果你需要用户的确认,你最好将AsyncTask拆分为两部分:首先做一些部分,然后在 onPostExecute()里面你可以显示对话框(因为它在ui线程上运行),并且取决于在用户操作上,启动第二个AsyncTask。
如果你仍然想要一个AsyncTask,你可以这样做:
final BlockingQueue<Boolean> queue = new ArrayBlockingQueue<Boolean>(1);
this.runOnUiThread(new Runnable() {
public void run() {
// Assuming you have ConfirmUser method which returns boolean
queue.add(ConfirmUser(message));
}
});
Boolean result = null;
try {
// This will block until something will be added to the queue
result = queue.take();
} catch (InterruptedException e) {
// deal with it
}