我有一个特定的情况,我想在UI线程上运行AsyncTask的doInBackground。我怎么能这样做?
答案 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)
据我所知.....你不能!
background task
执行时间更长Mainthread
负责应用的所有用户界面如果您想在执行后台操作时更新用户界面 ::
onProgressUpdate
的{{1}}方法即可更新
后台操作期间的UI AsyncTask
调用之前使用onPre
方法更新UI
由beckground
方法在rte onPost
之后进行更新
完成async task
doInBackground