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