我应该从Activity或IntentService调用RESTful Api吗?

时间:2015-04-22 21:04:18

标签: android intentservice

我正在从Android手机发出登录帖子请求。

返回的结果将是“成功”或“失败”。

我可以使用IntentServiceActivity发布此帖子请求,两者都可以正常使用。

案例我担心:

在从网络服务收到结果之前,电话响铃(活动暂停/销毁)。

在这种情况下,我会错过结果吗?

即使活动在接受结果之前停止,我也希望保存Web服务的结果。

无论如何它会使用Activity工作还是我需要使用IntentService接收结果?

2 个答案:

答案 0 :(得分:2)

它应该在服务上,找到这种不良行为的最佳方法是在你的应用程序上启用严格模式。

如果你把它放在活动上,它将阻止活动。

答案 1 :(得分:1)

从Activity发送的任何请求都会导致引发NetworkOnMainThreadException - 您不能从UI线程调用任何http请求(How to fix android.os.NetworkOnMainThreadException?

将请求委托给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是一个很好的工具,可以在开发过程中验证错误。