Asynctask vs IntentService用于与后端mysql服务器同步

时间:2013-10-28 20:29:55

标签: android android-asynctask android-service

我的应用程序每隔30秒执行一次同步过程。

我所做的是,发送一些数据,并相应地获取一组数据,并更新/插入我的本地sqlite数据库。有时候,由于这些操作,我更新了我的GUI。

我在几篇帖子中读到,asynctask可以完美地完成这项任务,在其他一些帖子中,许多人不鼓励使用asynctask,并告诉我实现intentService / broadcast receiver方法。

哪一个更好?什么时候?

2 个答案:

答案 0 :(得分:1)

为了最好地决定如何处理您的情况,您必须考虑多个因素。根据 doc

  

......一项启动长期运行的活动   相反,操作可能会为该操作启动服务   而不是简单地产生一个线程 - 特别是如果操作可能   比活动寿命长。这方面的例子是播放音乐   背景和上传相机拍摄的照片到网站。   使用服务可以保证操作至少具有   “服务流程”的优先级,无论发生什么事情   活性。

服务是应用程序中没有UI的一部分。它可以由UI(Activity)调用来启动,也可以由Application的任何其他组件启动。开发时,您可以自由地将其放在不同的线程上,甚至可以在不同的任务或进程中运行它。这允许您最终将其与UI分离。此外,您可以根据需要启动服务以独立运行(startService)或将活动绑定到它(bindService)。通过使用自定义处理程序,您可以设置回调以根据进度更新UI。如果用户更改活动,服务不一定会结束,但操作系统可能随时终止服务。

始终从UI线程实例化AsyncTask。它只允许特定的回调,但为了相对较短的事务(与专用的单独线程服务相比)简化了多线程的过程,这些事务本身与Activity执行的操作相关联。每当用户更改活动时,AsyncTask就会“暂停”,甚至可能会死亡,因为您的活动不再有UI线程。

AsyncTask的问题是,如果用户转到另一个Activity,则无法将该对象转移到另一个Activity,因此它会死亡。当用户旋转屏幕或类似的东西时,你可以玩一些技巧,但这不会扩展到通用破坏。 AsyncTask可以随机死掉。另一方面,你肯定可以在服务和活动之间进行沟通,但是做到这一点很棘手。

因此,根据您的情况,您必须做出设计决定。

答案 1 :(得分:0)

如果您需要更新用户界面,那么AsyncTask会更合适,但如果您需要在应用未运行时在后台进行更新,那么IntentService会更好,您会需要提出一种从IntentService

更新用户界面的方法

这是一个基于意见的问题,所以我不指望一个明确的答案。它是一个基于应用程序的基础问题