我的应用程序每隔30秒执行一次同步过程。
我所做的是,发送一些数据,并相应地获取一组数据,并更新/插入我的本地sqlite数据库。有时候,由于这些操作,我更新了我的GUI。
我在几篇帖子中读到,asynctask可以完美地完成这项任务,在其他一些帖子中,许多人不鼓励使用asynctask,并告诉我实现intentService / broadcast receiver方法。
哪一个更好?什么时候?
答案 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
这是一个基于意见的问题,所以我不指望一个明确的答案。它是一个基于应用程序的基础问题