用于后台任务的IntentService

时间:2014-10-18 07:05:52

标签: java android intentservice

我打算使用IntentService进行一些处理。该服务从清单中注册的广播接收器开始。该服务必须更新数据库,因此操作可能很长(甚至一分钟)。对于cpu,我可以使用唤醒锁,但关于操作系统?

  1. 是否可以在intentservice上调用startForeground?
  2. 杀人后再次创建一个intentservice?什么是默认行为? START_STICKY?
  3. 服务获取数据库锁(ReentrantReadWrite java lock)以避免并发访问,如果服务被杀死,锁被释放?如果没有,我该怎么办?

1 个答案:

答案 0 :(得分:1)

  1. IntentSerivice延伸Service时,没有什么可以阻止您致电startForeground()。你必须显示一个实际的通知(曾经有一个黑客在没有通知的情况下启用了前台服务,但幸运的是它已在4.3中修复)。

  2. IntentService的默认行为是START_NOT_STICKY。您可以通过在构造函数中或其他位置调用setIntentRedelivery(true)来更改它。

  3. ReentrantReadWrite是一个java级锁,而不是文件/ db / OS级锁。这意味着一旦进程停止,锁就会消失。 (你确实说过“数据库锁定”,但我认为这只是不准确的措辞 - 你不会以某种方式锁定数据库,不是吗?)。