2012-01-25 39 views
1

我想运行一个线程在后台执行一些工作(从获得唤醒锁的服务中)。在我的线程完成工作后,它会停止服务。从具有wakelock的服务运行的线程是否需要唤醒锁?

我的担忧是:

1 - 我是否需要要求这是在服务启动线程激活锁定?

2-系统在离开我的服务运行时是否可以终止我的线程?

3-如果2是我怎么能停止我的服务的情况下(我可以给该服务的超时时间,它将后死亡)

回答

2
  1. WakeLocks是,我的理解应用到Android组件(如服务,活动等)及其所有相关的线程。所以你不必在你的线程中获得新的wakelock。您可以通过传递获得的锁并从启动的线程调用isHeld来证明这一点。

  2. 您应该考虑部分唤醒锁,这将只关心保持CPU运行,而不考虑屏幕或键盘活动。由于这是一项服务,我假设你不在乎屏幕是否保持开启状态。

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

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