总是在android中使用服务?

时间:2015-08-31 09:12:16

标签: android android-asynctask android-service

我已经读过许多人不使用AsyncTask进行Web请求,而是使用IntentService,因为AsyncTask绑定了其活动的生命周期。总是这样吗?因为我正在制作社交媒体应用程序,我想知道用户做出的每个动作是否应该启动服务(例如,按下,添加评论等)?

3 个答案:

答案 0 :(得分:0)

不要使用AsyncTask,正如您可能已经阅读过的那样,它在Activity的重新创建上存在问题。但是,您可以将AsyncTaskLoader与LoaderManager一起使用,该程序旨在解决问题。

有一点是你对IntentService有误,你不是每次都使用IntentService 启动服务。您只向同一服务提交请求(除非它被杀死),并且IntentService从堆栈中提取请求。

答案 1 :(得分:0)

我倾向于使用两者的混合物。我在从服务器请求/发布数据时使用IntentService,然后对其进行反序列化并将其存储在本地。所有这些可能需要几秒钟,具体取决于返回的数据量和服务器的响应时间。

如果我知道请求会非常快,我会在活动中使用AsyncTask。我用它来更多火,忘了小任务。

要记住的重要一点是,您的AsyncTask与您的活动相关联。如果您的活动被破坏(由于方向改变等),那么您可以在onPostExecute()中轻松获得NPE。

答案 2 :(得分:0)

如果您希望执行的任务特定于Context,并且在离开Context后被视为垃圾,例如,如果您认为用户会话一旦离开就无效,那么AsyncTask是一个不错的选择。

但是,如果任务特定于上下文并且可能需要很长时间才能执行,并且您希望用户能够离开并稍后返回以查看结果,则即使任务也可以使用该服务特定于上下文。

如果您要执行的任务适用于Context的范围之外,那么服务可能更适合。

如果您只是一直使用某项服务,那么您可能会过度复杂化您的代码。