2012-02-02 38 views
1

我需要您的想法。我正在寻找的是一个任务或服务,运行在后台(无UI),能够执行以下操作:Android:用于后台处理的组件,必须手动启动

  • 它不应该永久运行,只有当它被调用时。有两个可能的来电者:
    1. gui/touch应用程序。用户可以输入数据,应用程序将这些数据传递给数据持久存储的后台服务。这可能随时发生,并定期在Android操作系统上随机发生。也许AlarmManager是一个合适的方法。当定期(例如,每30秒)调用一次该服务时,它应该处理在步骤1中存储的数据。处理完成后,它应该停止自己以节省电池。

换句话说: 用户不触发处理,用户只是对输入负责。 AlarmManager然后定期触发处理。

Android服务类是适合的还是有更好的方式去?

如果是,我在理解服务类时遇到问题。根据文档,它没有自己的进程,但在主机进程中运行。这是否会导致问题?所以有时候,phonegap插件(传递数据)是主机进程,有时报警代码是主机进程,或者我错了?我的意思是该服务没有主要应用程序,它可以从不同的位置调用独立的东西。

感谢

谢谢

回答

2

服务将是适当的在这里。

您可以安排AlarmManager定期调用您的服务,让您的UI活动将数据推送到它并可选择唤醒服务以处理数据。

服务在主机进程中运行,并将在UI线程中运行,除非您创建另一个线程。 IntentService类可以帮助你。 它允许您关闭在工作线程中由服务处理的意图。

意图在IntentService类中排队,并由IntentService管理的单个工作线程轮流处理。

在你的情况下,你可以让AlarmManager触发一个Intent,这个Intent将被你的服务在工作线程中处理。

+0

感谢,IntentService看起来很有希望,但我仍然有问题unettanding它。在传统Java中,当方法A从线程1调用时,方法A在线程1中运行。如果从线程2调用同一对象的相同方法A,则A突然在线程2中运行。然后我必须知道我的对象中的数据。 IntentService的行为如何?排队总是发生,不管它被调用哪个线程?服务中的数据是否保存? – ceran 2012-02-02 14:56:06

+0

我已经稍微编辑了我的答案,以解释Intents如何排队并且全部在单个工作线程上运行。只要您只在工作线程(onHandleIntent(Intent)方法)内处理它,您的数据就应该是安全的。 – mcnicholls 2012-02-02 15:03:19

+0

另外请确保考虑@herom在他的回答中所说的话。 – mcnicholls 2012-02-02 15:05:25

2

请注意,AlarmManager一旦手机重新启动就会丢失所有设置的闹钟,要重新初始化闹钟,通常需要创建一个从BroadcastReceiver派生的OnBootReceiver,以便在手机重新启动时得到通知。那么你将不得不再次设置闹钟。