2015-04-22 61 views
0

我正在從android手機發出登錄請求。我應該從Activity還是IntentService調用RESTful Api?

返回的結果將是'成功'或'失敗'。

我可以使用IntentServiceActivity發出此帖子請求,兩者都可以正常工作。

情況下,我擔心:

電話響起(活動暫停/破壞)從Web服務接收結果之前。

我會錯過這種情況下的結果嗎?

我希望保存Web服務的結果,即使活動在接受結果之前停止。

是否有反正它會使用活動或我需要使用IntentService接收結果?

回答

2

它應該在服務上,像這樣找到不良行爲的最佳方式是在應用程序上啓用嚴格模式。

如果你把它放在活動上,它會阻止活動。

+0

你是什麼意思阻止活動?活動恢復後會發生什麼?我會永遠錯過收到的信息嗎? – penduDev

+1

UI凍結,因爲線程將忙於執行操作。 –

1

在NetworkOnMainThreadException從活動結果發送的任何請求被提出 - 你不能調用來自UI線程(How to fix android.os.NetworkOnMainThreadException?

任何HTTP請求委派通過廣播(opitionally優先廣播請求IntentService並通知活動辦案當你的活動在後臺而廣播被傳送給接收者時)是我認爲的最簡單的方法。

或者,您可以使用AsyncTask,但您必須處理屏幕旋轉並記住有關任務取消的信息。

您可以擴展AsyncTaskLoader並提供自定義加載程序,但仍需記住請求取消(http://www.androiddesignpatterns.com/2012/08/implementing-loaders.html)。

第三方開源,也許? OkHttp允許你執行異步Http請求。另外,在執行請求的Call對象上有一個cancel()方法。因此,你可以很容易地在活動

https://github.com/square/okhttp/blob/master/samples/guide/src/main/java/com/squareup/okhttp/recipes/AsynchronousGet.java

實際上使用它時,StrictMode是一個很好的工具,在開發過程中驗證錯誤。

相關問題