我正在创建一个在后台运行的服务。它执行以下操作:
目前,该服务继续在任务运行/网络发送(没有唤醒锁)之间运行。
服务侦听验证和运行时更改;这需要一个单独的过程。有很多方法可以解决这个问题,但它们会涉及使用IPC(我认为这不会对性能产生很大影响)。
问题:
答案 0 :(得分:3)
问题出现了,我的服务应该在它自己的过程中吗?
没有。我的意思是它应该在与所有其他组件相同的过程中运行。
我认为如果其他人可以编写自己的UI,小部件和其他很酷的东西,那就太好了。 这个权利不一定是单独的过程吗?
没有。它将自动处于与“其他人”的代码分开的过程中。
现在服务在任务运行/网络发送之间保持运行(尽管不保留唤醒锁),因为我认为它比每分钟左右打开数据库/进行设置更有效。
您的用户可能不同意此计划。永恒的服务是用户通过“设置”应用程序攻击具有任务杀手和强制停止的开发人员的原因。
是否允许它之间死亡或者我应该让它在没有唤醒锁的情况下运行?
我建议您使用IntentService
(因为您无论如何都需要后台线程用于网络I / O)并让服务在两次轮询之间关闭。此外,请允许用户从您的开头段落中控制X和Y的值。
如果我的服务在两者之间死亡(必须重新打开数据库),任务会间隔运行吗?
一般来说,是的。除非闪存存储器忙,否则打开数据库需要非常少的时间(例如,几毫秒)。这是一个很小的代价,可以避免用户抱怨您的服务一直在运行。
如果不是在单独的过程中,人们可以使用我的服务吗?
是的,只要您公开一些API(AIDL,记录的Intents
集合,通过startService()
发送命令等)。
答案 1 :(得分:0)
在我看来,可能值得将应用程序纯粹用于服务(即除了'settings'Activity之外没有其他组件)并通过Intents完成所有操作。
只要清单中所有可能的Intent都使用<intent-filter>
块注册,任何人都可以与它通信(您自己的应用以及任何第三方应用)。
此外,您可能希望使用IntentService来处理命令,然后在完成后自行关闭。
如果不完全了解您的要求,即服务的处理方式,则很难进一步提出建议。