问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

android 写app没有wakelock为什么还可以使用电量

发布网友 发布时间:2022-04-30 03:45

我来回答

1个回答

热心网友 时间:2023-10-10 05:05

  测试结论:   1)灭屏待机最省电:   a)任何App包括后台Service应该尽可能减少唤醒CPU的次数,比如IM类业务的长连接心跳、QQ提醒待机闹钟类业务的alarm硬时钟唤醒要严格控制;   b)每次唤醒CPU执行的代码应该尽可能少,从而让CPU迅速恢复休眠,比如申请wake lock的数量和持有时间要好好斟酌;   2)WiFi比蜂窝数据,包括2G(GPRS)、3G更省电:   a)尽量在WiFi下传输数据,当然这是废话,不过可以考虑在有WiFi的时候做预加载,比如应用中心的zip包、手Q web类应用的离线资源等;   b)非WiFi下,尽量减少网络访问,每一次后台交互都要考虑是否必须。虽然WiFi接入方式已经占到移动互联网用户的50%,但是是有些手机设置为待机关闭WiFi连接,即便有WiFi信号也只能切换到蜂窝数据;   测试分析:   1)灭屏的情况:   a)灭屏待机,CPU处于休眠状态,最省电(7mA);   b)灭屏传输,CPU被激活,耗电显著增加,即便是处理1K的心跳包,电量消耗也会是待机的6倍左右(45mA);   c)灭屏传输,高负载download的时候WiFi最省电(70mA),3G(270mA)和2G(280mA)相当,是WiFi的4倍左右;   2)亮屏的情况:   a)亮屏待机,CPU处于激活状态,加上屏幕耗电,整机电量消耗不小(140mA);   b)亮屏传输,如果只是处理1K的心跳包,耗电增加不多(150mA),即便是很大的心跳包(64K),消耗增加也不明显(160mA);   c)亮屏传输,高负载download的时候WiFi最省电(280mA),3G(360mA)和2G(370mA)相当,是WiFi的1.3倍左右;   3)Alarm唤醒频繁会导致待机耗电增加:   手机灭屏后会进入待机状态,这时CPU会进入休眠状态。Android的休眠机制介绍的文章很多,这里引用一段网络文章:   Early suspend是android引进的一种机制,这种机制在上游备受争议,这里 不做。这个机制作用在关闭显示的时候,在这个时候,一些和显示有关的 设备,比如LCD背光,比如重力感应器,触摸屏,这些设备都会关掉,但是系统可能还是在运行状态(这时候还有wake lock)进行任务的处理,例如在扫描SD卡上的文件等.在嵌入式设备中,背光是一个很大的电源消耗,所以android会加入这样一种机制.   Late Resume是和suspend配套的一种机制,是在内核唤醒完毕开始执行的.主要就是唤醒在Early Suspend的时候休眠的设备.   Wake Lock在Android的电源管理系统中扮演一个核心的角色. Wake Lock是一种锁的机制,只要有人拿着这个锁,系统就无法进入休眠,可以被用户态程序和内核获得.这个锁可以是有超时的或者是没有超时的,超时的锁会在时间过去以后自动解锁.如果没有锁了或者超时了,内核就会启动休眠的那套机制来进入休眠.   当用户写入mem或者standby到/sys/power/state中的时候, state_store()会被调用,然后Android会在这里调用request_suspend_state()而标准的Linux会在这里进入enter_state()这个函数.如果请求的是休眠,那么early_suspend这个workqueue就会被调用,并且进入early_suspend   简单的说,当用户按power键,使得手机进入灭屏休眠状态,Android系统其实是做了前面说的一些工作:关闭屏幕、触摸屏、传感器、mp当前用户态和内核态程序运行上下文到内存或者硬盘、关闭CPU供电,当然为了支持语音通讯,modern等蜂窝信令还是工作的。   这种情况下,应用要唤醒CPU,只有两种可能:   a)通过服务器主动PUSH数据,通过网络设备激活CPU;   b)设置alarm硬件闹钟唤醒CPU;   这里我们重点分析第二种情况。首先来看看什么是alarm硬件闹钟。Google官方提供的解释是:Android提供的alarm services可以帮助应用开发者能够在将来某一指定的时刻去执行任务。当时间到达的时候,Android系统会通过一个Intent广播通知应用去完成这一指定任务。即便CPU休眠,也不影响alarm services的服务,这种情况下可以选择唤醒CPU。   显然唤醒CPU是有电量消耗的,CPU被唤醒的次数越多,耗电量会越大。现在很多应用为了维持心跳、拉取数据、主动PUSH会不同程度地注册alarm服务,导致Android系统被频繁唤醒。这就是为什么雷军说Android手机在安装了TOP100的应用后,待机时间会大大缩短的重要原因。   比较简单评测CPU唤醒次数的方法是看mpsys alarm,这里会详细记录从开机到当前的各个进程和服务唤醒CPU的次数和时间。通过对比唤醒次数和唤醒时间可以帮助我们分析后台进程和服务的耗电情况。Dumpsys alarm的输出看起来像这样:   其中544代表唤醒次数,38684ms代表唤醒时间。   4)Wake locks持有时间过长会导致耗电增加:   Wake locks是一种锁机制,有些文献翻译成唤醒锁。简单说,前面讲的灭屏CPU休眠还需要做一个判断,就是看是否还有任何应用持有wake locks。如果有,CPU将不会休眠。有些应用不合理地申请wake locks,或者申请了忘记释放,都会导致手机无法休眠,耗电增加。   原始数据:   测试方法:硬件设备提供稳压电源替代手机电池供电,在不同场景下记录手机平均电流。   测试设备:Monsoon公司的Power Monitor TRMT000141   测试机型:   测试用例:   灭屏benchmark(CPU进入休眠状态):7mA   灭屏WiFi:70 mA   灭屏3G net:270 mA   灭屏2G net GPRS:280mA   亮屏benchmark:140mA   亮屏wifi:280mA   亮屏3G net:360mA   亮屏2G:370mA   亮屏待机:140mA   亮屏wifi ping 1024包:150mA   亮屏wifi ping 65500包:160mA   灭屏 屏1024:45mA   灭屏ping 65500:55mA   关闭所有数据网络待机:7mA
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
厂口银杏园地址在哪里? 昆明银杏大道在什么地方 昆明哪些地方有银杏树 从二月河“帝王三部曲”看90年代的文学场(一) 二月河《落霞三部曲》读书札记 安装织梦CMS到新浪SAE,这数据库主机,用户都是什么?这个是安装在新浪SE... SAE上的mySql初始化了怎么用啊,java怎么连上去啊,地址,端口号,账号... 金鱼尾部出现血丝,怎么办? 金鱼尾鳍上有血丝,急躁不安是什么病 请问?家里养的金鱼,一夜过来,金鱼尾巴上面都有红色血丝是怎么回事... android系统后台唤醒怎么关闭 android系统睡眠状态如何唤醒线程和广播 怎样让android系统休眠啊,关屏后还一直唤醒着,很耗电 安卓待机应用状态四种模式 android gsensor 休眠震动唤醒功能如何实现 成功只属于强者的作文议论文要有两个名人事例对比600字 android 如何让手机进入休眠状态,又如何唤 java代码怎么控制android休眠和唤醒? 名人成功例子 关于名人成功的事例 比较使人进步的例子3个。(最好是名人事例) 历史人物中因相比较而进步的例子 (最好多点) oracle怎样查第二行数据出来 做外贸要什么基础条件,及应从什么开始做起? 简述在oracle数据库中能进行select*from emp查询的基本步骤? 微信给别人留言了,然后再删除,对方还能看到吗?我记得别人给我留言然后删除能看到。。 新手开贸易公司需要什么? 新人在外贸行业创业,第一步怎么拥有 电子表格中怎么办几个表格合并成一个 怎样对好友隐藏按步骤操作了,还是不行。 C++如何实现休眠 定时唤醒 android怎么唤醒正在休眠的cpu android os进程长时间处于“保持唤醒状态”,什么原因? android 多久进入深度睡眠 请教,在android上如何让bluetooth休眠的问题 android怎样在锁屏时唤醒cpu自动联网 android 休眠起来无法唤醒usb Android程序定时上传数据运行一个小时左右就不上传数据了 已经定时点亮屏幕唤醒CPU了 这是android机制的 android系统休眠关闭了哪些功能 5码是多大衣服呀? 童装的5码是多大呀? 小孩衣服5是多少码 请问童装上标的5码是适合身高多少的小朋友穿 童装里的5码一般是多大孩子穿的 ORACLE简述写一个查询语句的步骤 小米XIM概念版第二代手手机(xim2)什么时候上市? 小米xmi2s多少钱 小米xim2s有没有自带钢化玻璃的,自带贴在手机上的 小米手机为什么标志是m|而不是xm呢 小米蓝牙耳机xm-9493不能连接三星手机吗