2012-12-10 49 views
1

我是Android開發人員的初學者,我試圖實現一個android udp客戶端,它連接到一個java服務器併發送/接收一些數據包在這個過程中,它收集一些數據(如往返延遲等),用於衡量特定網絡的QoS。我嘗試過使用Java Threads來實現連接和發送/接收數據,但是如果我嘗試使用2個以上的線程,應用程序會崩潰並掛起。所以我正在尋找替代品。當通過這個網站以及其他一些鏈接時,我發現在android中,可以使用AsyncTask,Handler等來實現多線程。此外,我發現Service類還有助於在應用程序中運行後臺服務。請提出其中哪種方法最能達到我的目的。 在此先感謝。什麼是在Android應用中實現多線程的最佳/首選方法

+0

經過一些在線文章後,我遇到了Executor和ExecutorService。所以這就是我試過的: 在主活動類中,我創建了兩個可運行的對象來處理數據報的發送和接收。然後,我通過調用執行程序的execute方法並傳遞可運行對象作爲參數來啓動這兩個線程。雖然現在運行在我的電腦上的java服務器不斷收到數據包,但是android客戶端沒有響應。換句話說,UI不響應。我不知道我要去哪裏錯。 –

回答

0

沒有一個正確的答案可以作爲一個廣泛的中風應用於Android多線程。根據您的具體需求,有幾種不同的方式來處理它。

Android中的任何長時間運行,阻止呼叫都會導致應用程序崩潰。

儘管最常見的解決方案是使用AsyncTask。例如,當我想在一個活動中向一個Web API端點發出一些XML數據的呼叫時,我會在這種情況下使用一個AsyncTask並啓動doInBackground中的調用。

這不是一個合適的解決方案,儘管如果等待時間更長,或者可能是未知的等待時間。或者在總是等待的情況下,比如消息排隊服務。在這種情況下,最好根據擴展Service類來編寫一個單獨的應用程序。然後,您可以以類似的方式向您的主應用程序發送/接收來自服務的通知,或者從Web服務進行通信。

+0

好的,線程的執行時間非常長,因爲應用程序需要連續傳輸數據包,直到用戶停止傳輸。我之前使用的方法是爲發送和接收數據報創建單獨的線程。但是,我使用線程遇到的問題是程序崩潰,以及無響應的用戶界面。所以,如果我要使用服務,我應該爲每個單獨的執行線程創建一個單獨的服務嗎?此外,鏈接到一些適當的文章將有所幫助。 –

+0

這是一個很好的教程的鏈接。 http://www.vogella.com/articles/AndroidServices/article.html。確保你正在設置你的服務來運行它自己的進程,否則它會阻塞主線程並可能導致崩潰。一個AsyncTask會自動將自己旋轉到一個單獨的線程,然後在完成時自行釋放,但聽起來您可能需要去服務路線。 – bigtunacan

+0

感謝您的鏈接。我肯定會通過它並嘗試相應地實現我的應用程序 –

0

您可以使用AasyncTask做到這一點,正如你所提到的服務可能是太有用,其中u可以讓你的應用程序做任何它想要的背景下,如果用戶需要通過它的接口,那麼的AsyncTask使用的應用程序必須被用來避免崩潰

+0

請您詳細說明如何使用AsyncTask來避免崩潰? –

+0

使用AsyncTask的原因是處理網絡請求或每當你試圖讀取寫入數據庫,導致android系統將刪除應用程序,這是不響應5-10秒(ANR),將導致應用程序崩潰,所以你需要將你的網絡請求放到AsyncTask中做後臺處理,這樣用戶就會等待完成網絡請求 –

相關問題