【发布时间】:2012-02-19 02:34:21
【问题描述】:
我想运行一个线程在后台做一些工作(从一个获得唤醒锁的服务)。在我的线程完成工作后,它将停止服务。
我的担忧是:
1- 我需要在服务中启动的线程中要求唤醒锁吗?
2- 系统可以在让我的服务运行的同时终止我的线程吗?
3- 如果是 2,我怎么能停止我的服务(我可以给服务一个超时时间,让它在它之后死掉)
【问题讨论】:
标签: android multithreading service wakelock
我想运行一个线程在后台做一些工作(从一个获得唤醒锁的服务)。在我的线程完成工作后,它将停止服务。
我的担忧是:
1- 我需要在服务中启动的线程中要求唤醒锁吗?
2- 系统可以在让我的服务运行的同时终止我的线程吗?
3- 如果是 2,我怎么能停止我的服务(我可以给服务一个超时时间,让它在它之后死掉)
【问题讨论】:
标签: android multithreading service wakelock
据我了解,WakeLocks 适用于 Android 组件(例如服务、活动等)及其所有相关线程。因此,您不必在线程中获取新的唤醒锁。您可以通过传递获取的锁并从启动的线程调用 isHeld 来证明这一点。
您应该考虑部分唤醒锁,这将只涉及保持 CPU 运行,而不管屏幕或键盘活动如何。由于这是一项服务,我假设您不在乎屏幕是否保持打开状态。
请注意,它声明here:如果您持有部分唤醒锁,CPU 将继续运行,不管任何定时器,甚至在用户按下电源按钮之后。在所有其他唤醒锁中,CPU 将运行,但用户仍然可以使用电源按钮使设备进入睡眠状态。
编辑:此外,即使您可以按照建议的方式进行操作,最好仅在子线程中获取并释放唤醒锁以消耗电池电量。如果您需要使用 WiFi 进行这项工作,可能还需要 WiFiLock。
【讨论】: