我已经读过许多人不使用AsyncTask进行Web请求,而是使用IntentService,因为AsyncTask绑定了其活动的生命周期。总是这样吗?因为我正在制作社交媒体应用程序,我想知道用户做出的每个动作是否应该启动服务(例如,按下,添加评论等)?
答案 0 :(得分:0)
不要使用AsyncTask,正如您可能已经阅读过的那样,它在Activity的重新创建上存在问题。但是,您可以将AsyncTaskLoader与LoaderManager一起使用,该程序旨在解决问题。
有一点是你对IntentService有误,你不是每次都使用IntentService 启动服务。您只向同一服务提交请求(除非它被杀死),并且IntentService从堆栈中提取请求。
答案 1 :(得分:0)
我倾向于使用两者的混合物。我在从服务器请求/发布数据时使用IntentService,然后对其进行反序列化并将其存储在本地。所有这些可能需要几秒钟,具体取决于返回的数据量和服务器的响应时间。
如果我知道请求会非常快,我会在活动中使用AsyncTask。我用它来更多火,忘了小任务。
要记住的重要一点是,您的AsyncTask与您的活动相关联。如果您的活动被破坏(由于方向改变等),那么您可以在onPostExecute()中轻松获得NPE。
答案 2 :(得分:0)
如果您希望执行的任务特定于Context,并且在离开Context后被视为垃圾,例如,如果您认为用户会话一旦离开就无效,那么AsyncTask是一个不错的选择。
但是,如果任务特定于上下文并且可能需要很长时间才能执行,并且您希望用户能够离开并稍后返回以查看结果,则即使任务也可以使用该服务特定于上下文。
如果您要执行的任务适用于Context的范围之外,那么服务可能更适合。
如果您只是一直使用某项服务,那么您可能会过度复杂化您的代码。