从带有唤醒锁的服务运行的线程是否需要唤醒锁?

时间:2012-01-25 21:37:54

标签: android multithreading service wakelock

我想运行一个线程在后台做一些工作(来自获得唤醒锁的服务)。在我的线程完成工作后,它将停止服务。

我担心的是:

1-我是否需要在服务中启动的线程中使用唤醒锁?

2-系统可以在我的服务运行时杀死我的线程吗?

3-如果是2,我怎么能停止我的服务(我可以给服务一个超时时间,它会在它之后死掉)

1 个答案:

答案 0 :(得分:2)

  1. 据我所知,WakeLocks适用于Android组件(例如服务,活动等)及其所有相关联的线程。因此,您不必在线程中获取新的唤醒锁。您可以通过传递获取的锁并从已启动的线程调用isHeld来证明这一点。

  2. 您应该考虑使用部分唤醒锁,这只涉及保持CPU运行,无论屏幕或键盘活动如何。由于这是一项服务,我假设您不关心屏幕是否保持开启状态。

  3. 请注意,它指出here:如果您持有部分唤醒锁,CPU将继续运行,无论是否有任何计时器,甚至在用户按下电源按钮之后。在所有其他唤醒锁中,CPU将运行,但用户仍然可以使用电源按钮使设备进入睡眠状态。

    编辑:此外,即使您可以按照建议的方式进行操作,但获取并释放子线程中的唤醒锁以获取电池消耗可能更好。如果您需要使用WiFi进行此项工作,则可能还需要WiFiLock。