Wakelock和FLAG_KEEP_SCREEN_ON之间的区别?

Rag*_*har 37 android screen

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

mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, 
                getClass().getName());
Run Code Online (Sandbox Code Playgroud)

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

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Run Code Online (Sandbox Code Playgroud)

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

mib*_*lma 43

唤醒锁可以让您获得更多控制权(例如,在不关闭屏幕的情况下唤醒手机以下载内容)并要求您的应用程序保留唤醒锁许可.

因此FLAG_KEEP_SCREEN_ON,如果您想要的是在窗口可见时保持屏幕开启,则建议使用此选项.

  • @Ted:你在这里写的(至少)其他两个问题是错的.我们应该把它放在别人身上:`FLAG_KEEP_SCREEN_ON`完美适用于它所描述的内容:它只是让屏幕保持开启状态.它也不需要任何许可才能工作,也不仅仅在您的设备处于调试模式时才有效.它应该适用于每个设备,如果没有,那就是设备的故障;) (10认同)

not*_*bit 5

Wakelock含糊不清,因为它有许多不同的选择。该标志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   |
Run Code Online (Sandbox Code Playgroud)

请参阅唤醒锁PowerManager for Android的详细信息,以及有关确切实现的其他答案。


dhe*_*ran 5

唤醒锁用于后台服务,以在屏幕关闭时保持 CPU 运行以完成工作。您永远不应该在活动中使用唤醒锁。要使用唤醒锁,必须在应用程序的清单文件中添加 WAKE_LOCK 权限。


FLAG_KEEP_SCREEN_ON用于在Activity中保持屏幕打开,这也将在没有任何特殊权限的情况下保持 CPU 开启,这与唤醒锁不同。您永远不应该在服务中使用 FLAG_KEEP_SCREEN_ON。

干杯!