我對編程非常陌生,我有些疑惑。等待異步任務完成其工作
我有一個AsyncTask
這是我打電話爲RunInBackGround
。
,我開始這個過程中,如:
new RunInBackGround().execute();
但我想等到這個電話是完成它的執行,在進行代碼的其他語句之前。
我該怎麼做?
有沒有辦法呢?
我對編程非常陌生,我有些疑惑。等待異步任務完成其工作
我有一個AsyncTask
這是我打電話爲RunInBackGround
。
,我開始這個過程中,如:
new RunInBackGround().execute();
但我想等到這個電話是完成它的執行,在進行代碼的其他語句之前。
我該怎麼做?
有沒有辦法呢?
等待,直到該調用完成其執行
您需要調用AsyncTask.get()方法得到的結果返回並等待,直到doInBackground
執行不徹底。但這將凍結主UI線程,如果你沒有調用線程內的get方法。
要獲得導致回UI線程開始AsyncTask
爲:
String str_result= new RunInBackGround().execute().get();
所以如何等待結果和沒有得到主UI線程鎖定?! 說代碼等待結果但是同時,進度條不斷滾動! – 2015-11-10 07:39:26
@MuhammadNaderi:不使用'get'方法使用'AsyncTask'並在AsyncTask中調用'onPostExecute'方法,它可以在主UI線程上提供u結果 – 2015-11-10 07:41:30
確定這是一種解決方法,我已經使用了一段時間了,但有時候我需要等待asynctask的代碼,就像'c#'中的'await',而不是主線程鎖住當然 – 2015-11-10 07:57:55
優化雖然這將是很好,如果你的代碼可以並行運行,也可以是你只是使用線程,這樣的情況下即使您的應用程序的使用流程不得不等待它,也不會阻止UI線程。
這裏有兩個選項:
您可以在AsyncTask本身中執行您想要等待的代碼。如果它與更新UI(線程)有關,則可以使用onPostExecute方法。當您的後臺工作完成後,這會自動調用。
如果你出於某種原因被迫在Activity/Fragment/Whatever中執行它,你也可以讓自己成爲一個自定義的偵聽器,從AsyncTask中廣播出來。通過使用這個,你可以在你的Activity/Fragment /裏面有一個回調方法,不管什麼時候你只需要調用它:當你的AsyncTask完成任何你需要等待的時候。
這是一個了不起的答案,應該是可以接受的。另外這裏是如何使用AsyncTasks實現這個示例:http://stackoverflow.com/questions/12575068/how-to-get-the-result-of-onpostexecute-to-main-activity-because-asynctask-is -a – 2015-09-18 15:27:50
在你AsyncTask
添加一個ProgressDialog像:
private final ProgressDialog dialog = new ProgressDialog(YourActivity.this);
您可以在onPreExecute()
方法setMessage像:
this.dialog.setMessage("Processing...");
this.dialog.show();
,並在您onPostExecute(Void result)
方法解散你的ProgressDialog
。
感謝您提供這些附加信息。 – AndroidBeginner 2017-01-13 15:00:28
AsyncTask有四種方法..
onPreExecute -- for doing something before calling background task in Async
doInBackground -- operation/Task to do in Background
onProgressUpdate -- it is for progress Update
onPostExecute -- this method calls after asyncTask return from doInBackground.
,你可以打電話給你的工作就從onPostExecute()
doInBackground()
返回onPostExecute是您需要實現什麼後調用。
AsyncTask的意義在於它是異步的,意味着它不與代碼的其餘部分同步。 – Gjordis 2013-02-12 07:30:41
您可以使用它的onPostExecute()AsyncTask方法在您的類中獲取回調。 – DcodeChef 2013-02-12 07:32:59
你並不想等到它完成。你想要知道什麼時候結束。 – njzk2 2013-02-12 07:51:18