我应该从 Activity 还是 IntentService 调用 RESTful Api?
Should I call RESTful Api from an Activity or an IntentService?
我正在从 android phone 发出登录 post 请求。
返回的结果将是 'success' 或 'fail'。
我可以使用 IntentService
或 Activity
发出此 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
中使用它
确实,StrictMode 是一个很好的工具,可以在开发过程中验证错误。
我正在从 android phone 发出登录 post 请求。
返回的结果将是 'success' 或 'fail'。
我可以使用 IntentService
或 Activity
发出此 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
中使用它确实,StrictMode 是一个很好的工具,可以在开发过程中验证错误。