我想在UI线程上运行AsyncTask - 我该怎么做?

时间:2014-08-11 07:02:49

标签: android

我有一个特定的情况,我想在UI线程上运行AsyncTask的doInBackground。我怎么能这样做?

4 个答案:

答案 0 :(得分:5)

你明确可以,但正如@Devrath所说,这是毫无意义的。 AsyncTask用于后台操作。

以下是使用runOnUiThread方法的示例:

private class MyAsyncTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... params) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // WORK on UI thread here
            }
        });
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
    }

    @Override
    protected void onPreExecute() {}

    @Override
    protected void onProgressUpdate(Void... values) {}
}

答案 1 :(得分:1)

我最终做了以下事情:

获取doInBackground中的所有代码并将其移至方法。

在doInBackground中,我只调用此方法。

在我需要正常执行asynctask的情况下,我调用LongOperation()。execute()

在我需要在UI线程上运行asynctask的情况下,我不会调用它,但我会调用该方法。

答案 2 :(得分:1)

试试这个

public void commentBuilder() {
new Thread(new Runnable() {
@Override
public void run() {
//Your code 
}
}).start();
}

另外,有关详细信息https://stackoverflow.com/a/14038370

,请参阅此处

答案 3 :(得分:0)

据我所知.....你不能!

  • AsyncTask旨在执行background task 执行时间更长
  • 所以他们必须在与...不同的单独线程中执行 mainthread
  • Mainthread负责应用的所有用户界面

如果您想在执行后台操作时更新用户界面 ::

  • 只需使用onProgressUpdate的{​​{1}}方法即可更新 后台操作期间的UI
  • AsyncTask调用之前使用onPre方法更新UI 由
  • 否则,最后使用beckground方法在rte onPost之后进行更新 完成async task

{样品}

doInBackground