2011-08-22 58 views
20

想象一下,一个典型的场景,一个活动打开,需要调用REST HTTP API来获取一些内容,并且一旦收到更新UI。很明显,API调用需要在单独的线程上完成,但是应该使用AsyncTask,IntentService还是其他方法完成,为什么?从IntentService或AsyncTask进行REST API调用?

回答

12

我会推荐IntentServiceResultReceiver的组合,如this post中所述。

也看看Google iosched实现这个模型。 2010版本显示如何使用onRetainNonConfigurationInstancegetLastNonConfigurationInstance和一个静态类在配置更改(即屏幕旋转)上保持ResultReceiver

我已经在应用程序中成功实现了这个模型。如果您对提供的链接有任何疑问,请告知我们。

编辑:我忘了“为什么”的问题;)

AsyncTask被tighly势必活动,它不会很好地处理配置更改。在活动寿命内的短期任务(onResume和之间)很好。我将HttpClient用于我的REST API调用,连接超时和套接字超时设置为20秒(由于移动网络不佳...)。这意味着API调用可以持续40秒。你一定要在服务中处理这样一个长期任务,而不是AsyncTask

+0

我对@hleroy有个疑问,那么何时应该启动IntentService OnResume(),OnStart()或OnClickEventListener(),因为我需要使用SharedPreference在本地保存以供离线使用。举例来说,我需要从使用Webservice的服务器(在我的情况下,WCF web api)中在UI中列出200名学生,那么我应该在哪里放这行代码'//启动intent服务//运行Intent Service // Intent downloadIntent = new Intent (this.Context,typeof(StudentIntentService)); //this.Context.StartService(downloadIntent);' –