我開發了一個應用程序,其目的之一是將文件上傳到服務器。平均而言,文件非常大,上傳需要花費很多時間,因此爲了確保將其處理到最後,我將IO的關鍵部分移到了IntentService中。從每個上傳的IntentService中,都有一個啓動了IO作業的AsyncTask。不幸的是屏幕滾動在後臺上傳時凍結了幾次。我認爲IntentService + AsyncTask的組合應該是足夠的... 我會很感激任何建議如何解決它..服務中的繁重操作異步任務凍結屏幕
回答
我想你可能會濫用IntentService。我假設你從IntentService.onHandleIntent(Intent)
呼叫AsyncTask.execute(...)
。
IntentService被創建爲在非UI線程上一次執行一個後臺任務。這意味着onHandleIntent(Intent)
從後臺線程調用,不應該創建AsyncTasks。此外,一旦onHandleIntent(Intent)
完成(如果你所做的只是啓動一個AsyncTask,它立即執行),該服務就是關閉的候選對象。
我知道這並不直接回答你的問題,但它可能指向問題的原因。 請注意,如果您需要能夠同時處理多個請求,那麼您最好的辦法就是擴展Service並將工作請求排入onStartCommand(...)
的Executor。
[編輯]有關正確使用IntentService
的更多信息,請查看this。
感謝您的回答,我從他們那裏得到的是,以下解決方案應該適合完成文件上傳任務 http://vmix.googlecode.com/svn/trunk/android/VmixSDK/src/com/vmix/android /vmixsdk/rds/FileUploadService.java – basta 2012-07-17 07:38:35
這是一個好的開始,但很少有理由在Android(或任何Java 5或更高版本)中創建自己的Thread對象。管理你自己的線程可能是有風險的,特別是對於較新的程序員。例如,Thread.stop()方法已被棄用,實際上並沒有做你想做的事情。你應該考慮這種工作類型的Executor框架(http://developer.android.com/reference/java/util/concurrent/Executor.html)。它不僅提供了卓越的線程管理,而且還保證了大多數人不理解的與線程安全相關的某些事情。 – zienkikk 2012-07-17 14:18:11
- 1. 異步任務凍結UI
- 2. iOS異步任務凍結
- 3. 對話框凍結異步任務android
- 4. ProgressDialog凍結在異步任務
- 5. Android異步任務完全凍結UI
- 6. 異步任務被凍結UI
- 7. 異步任務沒有更新屏幕
- 8. WP7/Silverlight中的異步操作/任務
- 9. 如何在Android服務中異步任務網絡操作?
- 10. Windows服務中的異步操作
- 11. 執行繁重的任務時加載屏幕
- 12. 等待異步任務操作完成,並繼續當前的異步任務
- 13. 隊列異步任務操作?
- 14. 處理異步服務器端操作
- 15. 異步服務操作:無阻斷
- 16. 在PCL服務參考設置中禁用基於任務的異步操作
- 17. 顯示加載的UI凍結異步任務像這樣
- 18. Android異步任務重用
- 19. 任務凍結GUI
- 20. 異步操作vs異步網絡任務?
- 21. 異步任務從api的異步任務不運行異步
- 22. 異步任務vs任務
- 23. 異步任務中的getInputStream任務
- 24. 在Java中的異步任務中實現繁忙等待
- 25. Android服務/異步任務/線程
- 26. 異步任務與RIA服務
- 27. 異步任務服務未啓動
- 28. 飛濺屏幕上的Android異步任務
- 29. 執行異步任務時刷卡凍結
- 30. UI凍結/嘗試使用任務/異步等待
想要發表一些代碼嗎?特別是'IntentService'和'AsyncTask'?你是否正在UIThread('onPostExecute','onPreExecute'和'onProgressUpdate')上運行的任何'AsyncTask'方法中做任何工作? – 2012-07-16 22:05:55
只需檢查一下,您是否正在使用AsyncTask執行doInBackground中的所有重處理? – 2012-07-16 22:08:34