Android 6.0doze和standby 的一点理解
之前写的压力测试程序,在开发版和5.0上面测试好好的,即使熄灭屏幕也会跑。我的程序主要是在Activity里面开启了一个thread,其中不断在界面上显示任务信息。换到6.0的
机器上面,发现一个现象,正常屏幕点亮的时候,可以正常工作,但是一旦屏幕关闭的时候,过了一段时间,点亮屏幕,发现界面也在更新,但是相比于过去的这段时间,就好像接续着屏幕刚刚关闭时候的状态,也就是屏幕关闭的时候程序没有跑。
联想到之前在Android官网上看到的Doze和standby的电源管理模式,跑去官网上又看了下资料。(http://developer.android.com/training/monitoring-device-state/doze-standby.html)。
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。
(http://stackoverflow.com/questions/9335908/how-to-prevent-the-screen-of-an-android-device-to-turn-off-during-the-execution)
Android 6.0doze和standby 的一点理解的更多相关文章
- Android开发艺术探索第五章——理解RemoteViews
Android开发艺术探索第五章--理解RemoteViews 这门课的重心在于RemoteViews,RemoteViews可以理解为一种远程的View,其实他和远程的Service是一样的,Rem ...
- opencv笔记5:频域和空域的一点理解
time:2015年10月06日 星期二 12时14分51秒 # opencv笔记5:频域和空域的一点理解 空间域和频率域 傅立叶变换是f(t)乘以正弦项的展开,正弦项的频率由u(其实是miu)的值决 ...
- 对socket的一点理解笔记
需要学web service,但是在视频中讲解到了socket套接字编程.以前貌似课上老师有提过,只是没用到也感觉乏味.现在遇到,自己看了些博客和资料.记录一点理解,不知正确与否. 首先说这个名字,叫 ...
- iOS 的一点理解(一) 代理delegate
做了一年的iOS,想记录自己对知识点的一点理解. 第一篇,想记录一下iOS中delegate(委托,也有人称作代理)的理解吧. 故名思议,delegate就是代理的含义, 一件事情自己不方便做,然后交 ...
- 关于web开发的一点理解
对于web开发上的一点理解 1 宏观上的一点理解 网页从请求第地址 到获得页面的过程:从客户端(浏览器)通过地址 从soket把请求报文封装发往服务端 服务端通过解析报文并处理报文最后把处理的结果 ...
- angular.js的一点理解
对angular.js的一点理解 2015-01-14 13:18 by MrGeorgeZhao, 317 阅读, 4 评论, 收藏, 编辑 最近一直在学习angular.js.不得不说和jquer ...
- RxSwift 入坑好多天 - 终于有了一点理解
一.前言 江湖上都在说现在就要赶紧学 swift 了,即将是 swift 的天下了.在 api 变化不大的情况下,swift 作为一门新的语言,集众家之所长,普通编码确实比 oc 要好用的多了 老早就 ...
- rt-thread中动态内存分配之小内存管理模块方法的一点理解
@2019-01-18 [小记] rt-thread中动态内存分配之小内存管理模块方法的一点理解 > 内存初始化后的布局示意 lfree指向内存空闲区首地址 /** * @ingroup Sys ...
- rt-thread中软件定时器组件超时界限的一点理解
@2019-01-15 [小记] 对 rt-thread 中的软件定时器组件中超时界限的一点理解 rt_thread_timer_entry(void *parameter)函数中if ((next_ ...
随机推荐
- Spark常用RDD操作总结
aggregate 函数原型:aggregate(zeroValue, seqOp, combOp) seqOp相当于Map combOp相当于Reduce zeroValue是seqOp每一个par ...
- Android 4.1.1源码编译
适用环境: 系统:ubuntu-12.04.2-desktop-amd64 JDK:sun-java6-jdk Android源码:android_4.1.1_r1 虚拟机安装: VMware Wor ...
- HDU2686-Matrix & HDU3376-Matrix Again(费用流)
比较简单的题了. 只需从左上角到右下角找两条路就可以了. 因为每个点只能走一次,所以拆点,限制流量为1. 因为求的是最大值,所以权值取反求最小值. 因为第一个点和最后一个点经过两次,只算一次,最后要减 ...
- mssql存储过程demo
ALTER PROCEDURE [dbo].[sp_get_saleData]ASBEGIN set nocount on -- 获取最近上传数据的时间戳 declare @dd datetime s ...
- ST-Link STVP Cannot communicate with the device!
用STLink在ST Visual Programmer中对STM8下载二进制文件有时会出现: 原因:多半是STM8目标板没有电源有问题,或是电源引脚虚焊:
- 低级错误之Hbm中类型不一致错误
Myeclipse将数据库中的长整形生成为Bigdecimal类型,实际应该生成为Long.导致保存的时候报错.
- 你的iOS静态库该减肥了
我有点震惊,国内的具有极少的有关静态库开发的内容,除了一些简单的如何教你开发,而且是原创还是copy,谁知道呢?细思极恐,不扯那么远了,这里就已切身的爬坑经历提供几个静态库瘦身的方案. 公司最近开发完 ...
- 浅析 ThreadLocal
一.ThreadLocal类说明 ThreadLocal,很容易让人望文生义,直译"本地线程".ThreadLocal不是一个thread,是thread的局部变量.使用Threa ...
- 【转】Android studio 导入github工程
http://blog.csdn.net/feixiaku/article/details/45155587/ 从github下载两个开源项目: PagerSlidingTabStrip | ...
- 对<< ubuntu 12.04编译安装linux-3.6.10内核笔记>>的修正
前题: 在前几个月的时候,写了一篇笔记,说的是kernel compile的事情,当时经验不足,虽说编译过了,但有些地方写的有错误--因为当时的理解是有错误的.今天一一更正,记录如下: 前文笔记链接: ...