之前写的压力测试程序,在开发版和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 的一点理解的更多相关文章

  1. Android开发艺术探索第五章——理解RemoteViews

    Android开发艺术探索第五章--理解RemoteViews 这门课的重心在于RemoteViews,RemoteViews可以理解为一种远程的View,其实他和远程的Service是一样的,Rem ...

  2. opencv笔记5:频域和空域的一点理解

    time:2015年10月06日 星期二 12时14分51秒 # opencv笔记5:频域和空域的一点理解 空间域和频率域 傅立叶变换是f(t)乘以正弦项的展开,正弦项的频率由u(其实是miu)的值决 ...

  3. 对socket的一点理解笔记

    需要学web service,但是在视频中讲解到了socket套接字编程.以前貌似课上老师有提过,只是没用到也感觉乏味.现在遇到,自己看了些博客和资料.记录一点理解,不知正确与否. 首先说这个名字,叫 ...

  4. iOS 的一点理解(一) 代理delegate

    做了一年的iOS,想记录自己对知识点的一点理解. 第一篇,想记录一下iOS中delegate(委托,也有人称作代理)的理解吧. 故名思议,delegate就是代理的含义, 一件事情自己不方便做,然后交 ...

  5. 关于web开发的一点理解

    对于web开发上的一点理解 1 宏观上的一点理解 网页从请求第地址 到获得页面的过程:从客户端(浏览器)通过地址 从soket把请求报文封装发往服务端   服务端通过解析报文并处理报文最后把处理的结果 ...

  6. angular.js的一点理解

    对angular.js的一点理解 2015-01-14 13:18 by MrGeorgeZhao, 317 阅读, 4 评论, 收藏, 编辑 最近一直在学习angular.js.不得不说和jquer ...

  7. RxSwift 入坑好多天 - 终于有了一点理解

    一.前言 江湖上都在说现在就要赶紧学 swift 了,即将是 swift 的天下了.在 api 变化不大的情况下,swift 作为一门新的语言,集众家之所长,普通编码确实比 oc 要好用的多了 老早就 ...

  8. rt-thread中动态内存分配之小内存管理模块方法的一点理解

    @2019-01-18 [小记] rt-thread中动态内存分配之小内存管理模块方法的一点理解 > 内存初始化后的布局示意 lfree指向内存空闲区首地址 /** * @ingroup Sys ...

  9. rt-thread中软件定时器组件超时界限的一点理解

    @2019-01-15 [小记] 对 rt-thread 中的软件定时器组件中超时界限的一点理解 rt_thread_timer_entry(void *parameter)函数中if ((next_ ...

随机推荐

  1. 关于win10安装VisualSVN遇到的一个问题及解决办法

    问题:在win10系统中安装VisaulSVN遇到问题,错误提示:There is problem with this Windows Installer package. A DLL require ...

  2. Visual Studio中的Build Event

    在VS中,进行build时,可以在build之前,或者之后执行一些操作,比如把一些css,font,images文件从一个项目的文件夹复制到另一个项目的文件夹 方法: 点击项目,右键-属性-Build ...

  3. UI进阶 多线程

    一.多线程概述 程序.进程.线程 程序:由源代码生成的可执行应用.(例如:QQ.app) 进程:一个正在运行的程序可以看做一个进程.(例如:正在运行的QQ就是一个进程),进程拥有独立运行所需的全部资源 ...

  4. 关于Windows文件名和路径名的那些事

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:关于Windows文件名和路径名的那些事.

  5. Sqlite数据库简介

    在应用sqlite之前需要添加sqlite库,那么我们就会发现有3和3.0的区别,开始我也并不懂,后才知道: 实际上libsqlite3.dylib本身是个链接,它指向libsqlite3.0.dyl ...

  6. mybatis-generator-core自动生成do、mapping、dao 代码

    使用mybatis配置映射文件,有点麻烦,容易出错,可以使用jar工具自动生成代码,即高效又方便 一.下载两个jar,并放置在G:\tool\maven\generator目录下(自己定义) myba ...

  7. linux ssh 配置 添加用户 另外一种方法

    [root@localhost ~]# vi /etc/pam.d/sshd #%PAM-1.0auth       required     pam_stack.so service=system- ...

  8. 时间紧迫,写一些 NavigationController 一次性返回2级界面甚至更多级的界面

    在NavigationController中,调用pushViewController可以将界面推到指定的界面,调用popToViewController可以返回上层界面,可是它的实现原理是什么? 好 ...

  9. web工作方式,浏览网页,打开浏览器,输入网址按下回车键,然后会显示出内容,这个过程是怎样的呢?

    以下内容摘自<Go Web编程>,介绍的通俗易懂. 我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要浏览的内容.在这个看似简单的用户行为背后,到底隐藏了些什 ...

  10. ProgressSeekBar

    ProgressSeekBar.rar