想象一个典型的场景,一个 Activity 打开,需要调用一个 REST HTTP API 来获取一些内容,并且一旦收到更新 UI。显然 API 调用需要在单独的线程上进行,但应该使用 AsyncTask、IntentService 还是其他方法来完成,为什么?
最佳答案
我会推荐 IntentService
和 ResultReceiver
的组合,如 this post 中所述。
还可以查看实现此模型的 Google iosched。 2010 版本展示了如何使用 onRetainNonConfigurationInstance
、getLastNonConfigurationInstance
和静态类来保持 ResultReceiver
跨越配置更改(即屏幕旋转)。
我已经在一个应用程序中成功地实现了这个模型。如果您对所提供的链接有任何问题,请告诉我。
编辑:我忘记了“为什么”的问题;)
AsyncTask
与 Activity 紧密绑定(bind),它不能很好地处理配置更改。对于 Activity 生命周期内的短期任务(在 onResume
和 onPause
之间),这很好。我将 HttpClient
用于我的 REST API 调用,连接超时和套接字超时设置为 20 秒(由于移动网络不佳......)。这意味着 API 调用可以持续长达 40 秒。你肯定想在服务中处理这么长的任务,而不是 AsyncTask
。
关于android - 从 IntentService 或 AsyncTask 调用 REST API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7151285/