0

我在 AsyncTask 内部运行了一个很长的过程,但它可能需要在处理时确认用户的某些内容。我知道如何显示确认对话框,但如何检索输出并等待使用确认?

this.runOnUiThread(new Runnable() {
            public void run() {
               boolean output = ConfirmUser(message);
            }
        });
4

1 回答 1

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
}
于 2012-05-09T02:13:34.780 回答