我正在编写一个长时间运行的后台服务,用于收集和分析设备数据。为此,我启动了一个服务,该服务生成一个线程并执行数据收集/分析。
经过我的阅读,我了解到如果我想在屏幕锁定/设备休眠时使服务继续运行,那么我应该使用部分唤醒锁(partial wakelock),以确保当服务的线程在运行时,CPU不会进入睡眠状态。然而,我真的很困惑,因为我目前没有使用唤醒锁,但仍然能够将我的应用程序置于后台或锁定屏幕或通过任务管理器杀死应用程序,并且每次我这样做时,我都可以通过logcat和日志语句观察到我在服务中生成的线程仍在运行并执行我想要的工作。
我甚至运行了一个 adb shell dumpsys power ,发现我对于唤醒锁的引用计数(refcount)等于0,这表明没有其他应用程序为我持有唤醒锁。
难道我的服务没有使用唤醒锁也能在后台正常运行吗?
编辑: 当连接到 USB 和断开 USB 连接时,设备均表现出此行为。我定期将收集的数据上传到服务器,并进行多次测试,在这些测试中,我不插入设备并且锁定屏幕,但我仍然看到我的线程在运行并上传数据。