我知道最好的做法wake_lock
是在不再需要 a 时立即释放它,但是如果Activity
or Service
,例如,在释放锁之前已经完成或停止,会发生什么情况?是系统自动释放的吗?我认为在这种情况下系统应该自动释放它们,但我在 API 文档上找不到任何东西。
编辑:添加了更多信息
查看PowerManager.WakeLock
文档,我看到默认情况下,wake_locks 是引用计数的(setReferenceCounted
在此处阅读),即如果我们在活动中检索唤醒锁,PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "myWakeLock"); wl.acquire();
然后wl
保存它的引用变量超出范围,那么唤醒锁被释放是因为它的引用计数变为零……对吗?
编辑:上面的错误理解
我想我误解了上面的引用计数概念......它应该意味着如果我获得两次锁并只释放一次,那么引用计数为1并且尚未释放锁。如果它没有被引用计数,那么我可以获取 x 次,然后通过一次释放它被释放。