我正在開發一個遊戲,即在單獨的線程中運行。現在我需要從互聯網下載圖像。我爲此寫了一個AsyncTask
類,但我無法弄清楚如何從我的遊戲線程中正確調用它。實際上,我的AsyncTask
處於阻止狀態,但在下載圖像之前需要等待。如果我使用runOnUIThread
,它不會阻止我的線程,並進一步,這根本不適合我。我試過在運行AsyncTask
之前也使用Looper.prepare()
,但是這也有一些麻煩:Looper.myLooper().quit()
似乎沒有工作,並且如果我嘗試再次撥打AsyncTask
,我得到一個異常告訴我,我試圖第二次致電Looper.prepare()
。 我應該如何繼續?提前致謝。如何從一個單獨的線程正確調用AsyncTask?
1
A
回答
1
如果您的後臺線程無論如何都會阻塞,您不需要AsyncTask,並且可以直接在此線程中進行圖像加載。之後要在UI線程上發佈,您需要設置Handler
並設置彎道。一種選擇是傳遞在UI線程中創建的處理程序。另一種選擇是一些背景傳遞給你的後臺線程並做
Handler h = new Handler(context.getMainLooper());
如果圖像加載過程中需要一些最新進展,你可以使用的AsyncTask並按照上述方法使用創建的處理程序。
1
如果你的遊戲線程不是你的主線程,也就是說,如果它不是UI線程,則從你的遊戲線程調用處理程序。現在從這個處理程序調用你的異步任務。
只需調用這樣的東西。
hm.sendEmptyMessage(0);
Handler hm = new Handler(){
public void handleMessage(Message msg)
{
//call async task.
}
};
謝謝。
相關問題
- 1. 線程:從一個單獨的線程調用委託(VS2010)
- 2. 如何從另一個AsyncTask調用AsyncTask?
- 3. Android:從一個單獨的類文件調用AsyncTask內部類
- 4. 如何正確地從一個獨立的應用程序
- 5. 安卓:從一個單獨的線程
- 6. 從一個單獨的線程繪畫?
- 7. 創建從一個單獨的線程
- 8. 從另一個AsyncTask調用一個AsyncTask
- 9. 如何執行線程同步從一個單獨的單位
- 10. 如何正確設置AsyncTask以從UI線程分離下載?
- 11. 如何正確創建一個AsyncTask
- 12. 如何從一個單獨的線程中的Android
- 13. 如何從sockets.io啓動一個單獨的線程引發的線程
- 14. AsyncTask和Android線程:如何正確使用它?
- 15. 如何正確使用AsyncTask
- 16. 如何正確應用AsyncTask?
- 17. 從AsyncTask調用UI線程方法
- 18. 如何讓我的鼠標從單獨的線程回調? C++
- 19. C#:調用與[類型] .InvokeMember()在一個單獨的線程
- 20. 在一個單獨的線程中調用無效時崩潰
- 21. 在單獨的線程上同時調用一個函數
- 22. AsyncTask作爲一個單獨的類
- 23. 從單獨的線程
- 24. 是否可以從Servlets調用一個獨立的線程?
- 25. 什麼是從UI線程暫停AsyncTask的正確方法
- 26. Asynctask一個UI線程
- 27. BeginReceive在一個單獨的線程
- 28. 監聽在一個單獨的線程
- 29. 文件在一個單獨的線程
- 30. ProgressDialog在一個單獨的線程
另一個問題是我的遊戲包含兩項活動:主要活動和遊戲活動。我通過startActivity()開始我的遊戲活動,然後啓動它的單獨線程。現在,第一個活動無法從遊戲活動訪問,所以我無法訪問在此處創建的處理程序。我該怎麼辦? – Egor 2011-06-09 08:19:18
創建主要活動的靜態實例。說 公共靜態MainActivity mainactivity; oncreate(){ mainactivity = this; } 現在使用這個instance.getHandler()。sendEmptyMessage(0); – 2011-06-09 10:53:10