我应该从 Activity 还是 IntentService 调用 RESTful Api?

Should I call RESTful Api from an Activity or an IntentService?

我正在从 android phone 发出登录 post 请求。

返回的结果将是 'success' 或 'fail'。

我可以使用 IntentServiceActivity 发出此 post 请求,两者都可以正常工作。

我关心的案例:

Phone 在从网络服务接收结果之前响铃 (activity paused/destroyed)。

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

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

无论如何它都可以使用 Activity 还是我需要使用 IntentService 接收结果?

它应该在服务上,发现此类不良行为的最佳方法是在您的应用程序上启用严格模式。

如果你把它放在 activity 上,它会阻塞 activity。

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

调用任何 http 请求

将请求委托给 IntentService 并通过广播通知 Activity(当广播传送到接收者时,当您的 Activity 处于后台时,可选择优先广播处理情况)是我最简单的方法想想。

或者,您可以使用 AsyncTask,但您必须处理屏幕旋转并记住任务取消。

您可以扩展 AsyncTaskLoader 并提供您的自定义加载程序,但您仍然必须记住请求取消 (http://www.androiddesignpatterns.com/2012/08/implementing-loaders.html)。

也许是第三方开源? OkHttp 允许您执行异步 Http 请求。此外,在执行请求的 Call 对象上还有一个 cancel() 方法。因此,您可以轻松地在 activity

中使用它

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

确实,StrictMode 是一个很好的工具,可以在开发过程中验证错误。