我使用AsyncTask將數據上傳到UI。我寫了代碼從一個單獨的方法從服務器下載數據,我從doinBackground調用該方法。它會給出錯誤,因爲UI方法不能從doInBackground訪問,但是我想訪問。任何替代進程都可以從doinBackground訪問UI方法。Android:從AsyncTask調用UI線程上的方法doInBackground方法
15
A
回答
47
任何可供選擇的方法是存在的,以從doinBackground訪問UI方法。?
致電publishProgress()
在doInBackground()
。把你的UI更新邏輯放在AsyncTask
的onProgressUpdate()
中。在調用publishProgress()
之後,將在主應用程序線程(a.k.a.,UI線程)上調用onProgressUpdate()
。 Here is a sample project證明了這一點。
7
1
正如其他人指出的,你可以使用runOnUiThread。但是,在doInBackground中你會想要做到這一點似乎有點奇怪。如果您想要向用戶指示進度,您希望在AsyncTask.onProgressUpdate中處理該進度,並在doInBackground中調用publishProgress。
你可以閱讀更多有關的AsyncTask這裏:http://developer.android.com/reference/android/os/AsyncTask.html
-Dan
1
使用doInBackground()
只是任務是:
- 花一些時間
- 是不是UI相關
然後你可以執行AsyncTask.onPostExecute()
運行代碼來的AsyncTask
從JavaDoc的處理上主UI線程的結果AsyncTask.onPostExecute()
:
doInBackground之後的UI線程上「運行。 ......「
相關問題
- 1. AsyncTask的doInBackground方法阻止UI線程
- 2. 從AsyncTask調用UI線程方法
- 3. 的AsyncTask無法調用doInBackground方法
- 4. 如何在doInBackground方法中調用UI或UI線程
- 5. Android:如何從AsyncTask調用非靜態方法(通過doInBackground)
- 6. AsyncTask doInBackground方法中的WebView?
- 7. 停止AsyncTask doInBackground方法
- 8. 在Android中停止AsyncTask doInBackground方法
- 9. Android的 - 方法必須從UI線程
- 10. Android AsyncTask:在主線程或後臺線程中執行doInBackground()內部調用的方法嗎?
- 11. 如何將JSONObject從doInBackground()方法返回到AsyncTask上的onPostExecute()方法?
- 12. 的AsyncTask doInBackground方法 - 參數誤差
- 13. Android:是在主UI線程上調用View.onClick()方法嗎?
- 14. 方法getText()必須從UI線程調用(Android Studio)
- 15. Android Studio錯誤:必須從UI調用方法getText()線程
- 16. 什麼是從UI線程暫停AsyncTask的正確方法
- 17. 在UI線程中調用parseNetworkResponse方法
- 18. 調用Thread.sleep()方法中的AsyncTask doInBackground時間比預期要
- 19. 針對主UI線程的Looper.prepare()和Looper.loop()的方法調用android
- 20. Android的 - 如何適應的AsyncTask doInBackground方法
- 21. 反覆調用方法Android的線程
- 22. 線性佈局中的Android AsynchTask - 必須從UI調用方法線程
- 23. 爲什麼即使AsyncTask在internalHandler中使用Looper.getMainLooper(),也必須在UI線程上調用AsyncTask的execute()方法?
- 24. Android - 使用AsyncTask調用方法會中斷其他方法
- 25. 無法調用AsyncTask doInBackground()和onPostExecute
- 26. 如何從主線程上的線程調用方法?
- 27. 從UI線程運行的Fragment中調用Activity方法嗎?
- 28. 從Asynctask的onPostExecute()方法調用onResume()方法
- 29. 如何在使用TPL時在UI線程上調用方法?
- 30. android studio「插入應用程序」方法gettext必須從UI線程調用
CommonsWare的名字就夠了。 +1。 – 2012-03-15 12:10:33
+1對於明確的答案 – 2012-03-15 12:11:01
知道runOnUiThread()的方式,但喜歡處理此+1的另一種方法。 – Deva 2012-03-15 12:11:43