2013-11-26 69 views
2

我已经创建了Intent服务。在这个服务中,我想从服务器获取数据,所以我在Intent服务中使用AsyncTask,但它不工作,因为IntentService在另一个线程(工作线程)中不在主线程而OnPreExecute()和onPostExecute()在主线程中运行。意向服务或服务

然后我扩展Service类并在其中写入AsyncTask。它工作正常,因为Service在主线程中运行,因此在使用onPreExecute()和onPostExcute()时没有发现错误。

当我使用服务和意图服务?在我的情况下什么是合适的意向服务或服务。

+0

是否需要从服务器获取数据?只是问问。我的意思是,另一种方法是您可以以JSON或XML的形式呈现数据,并将其解析到应用程序中。 – JoelFernandes

回答

1

正如您所说,服务将在UI线程上运行。因此,如果你想驱逐一些后台处理(如网络请求),你可以使用一个服务并管理你自己的线程来实现后台工作。

这里不需要AsyncTask,只需使用普通的线程即可。

但是使用IntentService将会容易得多,正如您再次说的那样,他们有自己的线程来执行后台工作。再次,不要在这里使用AsyncTask,只是在你的意图服务中执行你的查询,就是这样。意图服务应仅在处理请求时终止。没有别的事要做。

一些图书馆将帮助您实现此目标,如RoboSpice

+0

谢谢你的答案。在我的情况下,任何api调用(服务器请求)处理由第三方jar完成。我们有回调机制,如调用api它给成功和失败响应。成功我获得数据,所以我不能修改第三派对api(请求机制)。我知道api使用aynckTask。当我使用Intent服务时,所以它不起作用。Intentservcie - > onHandleIntent() - >调用api - >在api中它使用asynctask。 –

+0

,以便服务在我们的情况下是最好的。 –