我是Android開發人員的初學者,我試圖實現一個android udp客戶端,它連接到一個java服務器併發送/接收一些數據包在這個過程中,它收集一些數據(如往返延遲等),用於衡量特定網絡的QoS。我嘗試過使用Java Threads來實現連接和發送/接收數據,但是如果我嘗試使用2個以上的線程,應用程序會崩潰並掛起。所以我正在尋找替代品。當通過這個網站以及其他一些鏈接時,我發現在android中,可以使用AsyncTask,Handler等來實現多線程。此外,我發現Service類還有助於在應用程序中運行後臺服務。請提出其中哪種方法最能達到我的目的。 在此先感謝。什麼是在Android應用中實現多線程的最佳/首選方法
回答
沒有一個正確的答案可以作爲一個廣泛的中風應用於Android多線程。根據您的具體需求,有幾種不同的方式來處理它。
Android中的任何長時間運行,阻止呼叫都會導致應用程序崩潰。
儘管最常見的解決方案是使用AsyncTask。例如,當我想在一個活動中向一個Web API端點發出一些XML數據的呼叫時,我會在這種情況下使用一個AsyncTask並啓動doInBackground中的調用。
這不是一個合適的解決方案,儘管如果等待時間更長,或者可能是未知的等待時間。或者在總是等待的情況下,比如消息排隊服務。在這種情況下,最好根據擴展Service類來編寫一個單獨的應用程序。然後,您可以以類似的方式向您的主應用程序發送/接收來自服務的通知,或者從Web服務進行通信。
好的,線程的執行時間非常長,因爲應用程序需要連續傳輸數據包,直到用戶停止傳輸。我之前使用的方法是爲發送和接收數據報創建單獨的線程。但是,我使用線程遇到的問題是程序崩潰,以及無響應的用戶界面。所以,如果我要使用服務,我應該爲每個單獨的執行線程創建一個單獨的服務嗎?此外,鏈接到一些適當的文章將有所幫助。 –
這是一個很好的教程的鏈接。 http://www.vogella.com/articles/AndroidServices/article.html。確保你正在設置你的服務來運行它自己的進程,否則它會阻塞主線程並可能導致崩潰。一個AsyncTask會自動將自己旋轉到一個單獨的線程,然後在完成時自行釋放,但聽起來您可能需要去服務路線。 – bigtunacan
感謝您的鏈接。我肯定會通過它並嘗試相應地實現我的應用程序 –
您可以使用AasyncTask做到這一點,正如你所提到的服務可能是太有用,其中u可以讓你的應用程序做任何它想要的背景下,如果用戶需要通過它的接口,那麼的AsyncTask使用的應用程序必須被用來避免崩潰
請您詳細說明如何使用AsyncTask來避免崩潰? –
使用AsyncTask的原因是處理網絡請求或每當你試圖讀取寫入數據庫,導致android系統將刪除應用程序,這是不響應5-10秒(ANR),將導致應用程序崩潰,所以你需要將你的網絡請求放到AsyncTask中做後臺處理,這樣用戶就會等待完成網絡請求 –
- 1. 實現線程定時器的最佳方法是什麼
- 2. 在Android中線程的最佳方法是什麼?
- 3. 在SWT/JFace中實現多選組合的最佳方法是什麼?
- 4. 實現Android(4.0+)首選項的正確方法是什麼?
- 5. 在Android應用中實施AdWords的最佳方式是什麼?
- 6. 在Android中實現搜索的最佳方式是什麼?
- 7. 在Android 2.1中實現下載的最佳做法是什麼?
- 8. 製作android應用程序的最佳方法是什麼?
- 9. Android中共享首選項的最佳選擇是什麼?
- 10. 什麼是WPF多線程的最佳方法
- 11. 在iOS應用程序中實現文件夾的最佳方式是什麼?
- 12. 在C#web應用程序中實現通知的最佳方式是什麼?
- 13. 在Android上實現「存根」的最佳方式是什麼?
- 14. 什麼是實現GB中大數據集的最大似然估計的最佳/首選方法
- 15. 在Android應用程序中實現設計的最佳方式?
- 16. Android中連續後臺線程的最佳選擇是什麼?
- 17. 在C++中實現工廠方法的首選方法是什麼?
- 18. git用於多語言實現的最佳做法是什麼?
- 19. 在多線程共享的對象中實現唯一性的最佳方法是什麼?
- 20. 在.net中製作單實例應用程序的最佳方法是什麼?
- 21. 實現此算法的最佳方法是什麼?
- 22. 在meteor.js中實現響應按鈕的最佳方法是什麼?
- 23. 實現複雜首選項屏幕的最佳方法?
- 24. 在Rails應用程序中管理多頁JavaScript的最佳方法是什麼?
- 25. 在C++中實現這種工作流程的最佳方法是什麼?
- 26. 什麼是Zend Acl的首選實現方法
- 27. Android:實現遊戲板的最佳方式是什麼?
- 28. 實現多個spinners的最佳方式是什麼?
- 29. 在Delphi中實現C#的BackgroundWorker的最佳方式是什麼?
- 30. 什麼是多線程編程的最佳排序算法?
經過一些在線文章後,我遇到了Executor和ExecutorService。所以這就是我試過的: 在主活動類中,我創建了兩個可運行的對象來處理數據報的發送和接收。然後,我通過調用執行程序的execute方法並傳遞可運行對象作爲參數來啓動這兩個線程。雖然現在運行在我的電腦上的java服務器不斷收到數據包,但是android客戶端沒有響應。換句話說,UI不響應。我不知道我要去哪裏錯。 –