Wakelock和FLAG_KEEP_SCREEN_ON之间的区别?

保持屏幕清醒可以通过使用wakelock来完成

mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName()); 

或者通过将FLAG_KEEP_SCREEN_ON添加到窗口,

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

这两者之间的技术差异是什么,在性能和电池寿命方面是推荐的?

一个唤醒锁可以给你更多的控制(就像在没有closures屏幕的情况下唤醒手机下载东西一样),并且要求你的应用程序保持唤醒锁的权限。

因此,如果您只想在窗口可见的情况下保持屏幕FLAG_KEEP_SCREEN_ON则build议使用FLAG_KEEP_SCREEN_ON

Wakelock含糊不清,因为它有很多不同的select。 FLAG_KEEP_SCREEN_ON标志只能这样做。

 | Flag Value | CPU | Screen | Keyboard | ----------------------------------------------------- | PARTIAL_WAKE_LOCK | On* | Off | Off | | SCREEN_DIM_WAKE_LOCK | On | Dim | Off | | SCREEN_BRIGHT_WAKE_LOCK | On | Bright | Off | | FULL_WAKE_LOCK | On | Bright | Bright | 

请参阅wakelock或PowerManager for Android的具体细节,以及其他答案的确切实施。

后台服务使用唤醒锁来保持CPU运行在屏幕closures的情况下工作。 您不应该在活动中使用唤醒锁。 要使用唤醒锁,必须在应用程序的清单文件中添加WAKE_LOCK权限。


FLAG_KEEP_SCREEN_ON用于活动,以保持屏幕打开,这将保持CPU没有任何特殊许可,不像唤醒锁。 你不应该在服务中使用FLAG_KEEP_SCREEN_ON。

干杯!