0

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

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

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

哪一个更好?什么时候 ?

4

2 回答 2

1

为了最好地决定如何处理您的情况,您必须权衡多种考虑因素。根据文档

...启动长时间运行的操作的活动可能会很好地为该操作启动服务,而不是简单地产生一个线程 - 特别是如果该操作可能比该活动更持久。例如,在后台播放音乐并将相机拍摄的照片上传到网站。使用服务可以保证操作至少具有“服务进程”优先级,而不管活动发生了什么。

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

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

AsyncTask 的问题是,如果用户转到另一个 Activity,您无法将该对象转移到另一个 Activity,因此它会死掉。当说用户旋转屏幕或类似的东西时,您可以玩一些技巧,但这不会扩展到通用破坏。AsyncTask 可以随机死亡。另一方面,您绝对可以在 Service 和 Activity 之间进行通信,但要正确执行是很棘手的。

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

于 2013-10-28T21:18:53.087 回答
0

如果您需要更新 UI,那么AsyncTask将更适合,但是如果您需要在应用程序未运行时在后台更新它,那么IntentService会更好,您需要想出一种方法来从您的 UI 更新IntentService

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

于 2013-10-28T20:32:45.810 回答