您的位置:首页 > 移动开发 > Android开发

保持屏幕唤醒的几种方式总结

2018-03-24 01:36 525 查看

1.通过WakeLock的方式

首先设置唤醒锁的权限

<uses-permission android:name="android.permission.WAKE_LOCK" />


<uses-permission android:name="android.permission.DEVICE_POWER"/>


代码示例:

private PowerManager.WakeLock mWakeLock;

private void acquireWakeLock() {
if (mWakeLock == null) {
PowerManager powerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
mWakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, TAG);
}

//建议计数模式设置为true
mWakeLock.setReferenceCounted(false);
mWakeLock.acquire(60 * 1000);
}

private void releaseWakeLock() {
if (mWakeLock.isHeld()) mWakeLock.release();
}`


总结:

尽量使用 acquire(long timeout) 设置超时, (也被称作超时锁). 例如网络请求的数据返回时间不确定, 导致本来只需要10s的事情一直等待了1个小时, 这样会使得电量白白浪费了. 设置超时之后, 会自动释放已节省点远.

建议计数模式setReferenceCounted()设置为true,这样调用一次 release() 就会释放所有锁。

兼容性问题:PowerManager.SCREEN_DIM_WAKE_LOCK模式已经在废弃。

2.通过window的flag属性设置

示例代码:

private void acquireWakeLock(Activity activity) {
if (activity != null && activity.getWindow() != null) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
}

private void releaseWakeLock(Activity activity) {
if (activity != null && activity.getWindow() != null) {
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
}


`

3.通过设置View的属性

在布局文件里加上

android:keepScreenOn="true"


总结:

兼容性:采用window的flag的方式的兼容性更广

Api的友好性:可以手动进行管理屏幕的唤醒与否

综合比较选择window的flag方式。

参考文章:

https://blog.csdn.net/a57565587/article/details/51669520/

https://www.jianshu.com/p/48ed37738a9e/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  WakeLock Android ScreenOn