博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 6.0doze和standby 的一点理解
阅读量:6801 次
发布时间:2019-06-26

本文共 1271 字,大约阅读时间需要 4 分钟。

之前写的压力测试程序,在开发版和5.0上面测试好好的,即使熄灭屏幕也会跑。我的程序主要是在Activity里面开启了一个thread,其中不断在界面上显示任务信息。换到6.0的

机器上面,发现一个现象,正常屏幕点亮的时候,可以正常工作,但是一旦屏幕关闭的时候,过了一段时间,点亮屏幕,发现界面也在更新,但是相比于过去的这段时间,就好像接续着屏幕刚刚关闭时候的状态,也就是屏幕关闭的时候程序没有跑。

联想到之前在Android官网上看到的Doze和standby的电源管理模式,跑去官网上又看了下资料。()。

doze休眠 和app standby待机模式是23也就是6.0才增加的。

当用户没有充电,关闭屏幕,手机也没有移动的时候,设备就会进入doze模式。在该模式下,系统会尝试通过限制网络访问以及CPU密集的服务来保存电量,同时会推迟同步、标准闹钟等工作。间断性地,系统会过一段时间退出doze模式,来让app完成推迟的活动任务,在这段维持的窗口,系统会运行所有的同步,工作,以及闹钟,让apps访问网络等工作。随着时间流逝,间隔期会越来越大。不过当用户一旦充电或者打开屏幕,移动手机的时候,那么系统会退出doze模式,所有的apps就会回到正常的活动。闹钟之类的在API23上面增加了新的API,不过最好还是用GCM,全称是Google Cloud Messaging。

App待机模式允许当用户没有积极地用它的时候系统决定一个app是闲散的。比如用户长久没有触摸屏幕,不过如果用户,

1.用户精准地启动app.
2.app在后台有进程(不管是活动还是后台服务,或者另一个activity或者后台服务)
3.app生成通知,比如用户看见屏幕锁或者通知托盘。
当用户插上电源设备,系统就会将app从待机状态释放,允许他们自由地访问网络和执行任务如同步。如果设备闲散了长时间,那么系统会运行app一天才访问一次网络。

google提供了解决方案是什么,GCM,不管是doze还是standby。

要是没有呢,那么android提供了电池优化的白名单模式,这里有一个优化和不优化选项,当然我们也可以在代码里面写。一个是权限REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,一个是intent如 ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS。不过进白名单也有一些限制,一些即时消息,或者VOIP或者自动任务的APP等有不同的应用限制。

不过我对我做压力测试的应用添加了忽略优化,不知道是这个机器系统对安卓原生系统做了修改还是什么,当关闭屏幕的时候activity里面的线程还是停止。

后来意外地,google一下,发现对我执行任务的activity绑定的layout界面加上一个xml属性,screenOn,结果发现竟然可以了,虽然屏幕一直亮着,但是任务在跑着,就OK。

()

转载于:https://www.cnblogs.com/likeshu/p/5424683.html

你可能感兴趣的文章
Android Zxing条码扫描自定义控件(附代码)
查看>>
Netty学习笔记之Netty之初印象(一)
查看>>
centos7上安装knock
查看>>
Google 镜像站搜集
查看>>
Python 分布式进程间通讯
查看>>
用RMAN 备份异机恢复 迁移数据(一)dave
查看>>
Redis参数一览
查看>>
数据库日常运维中的几个操作建议
查看>>
Java基础-String类常用方法
查看>>
轻量级移动设备即时通讯技术MobileIMSDK的常见问题解答
查看>>
管理H3C交换机
查看>>
Java_Index
查看>>
thymeleaf th:href 多个参数传递格式
查看>>
2008R2 组策略的应用
查看>>
enum
查看>>
java自增的陷井
查看>>
Apache2.4版本环境下基于虚拟主机、ssl、用户控制
查看>>
要卖的四本书的封面
查看>>
Linux下puppet安装
查看>>
python笔记--集合
查看>>