CPU对于耗电的简析

Android手机包含AP和BP两个CPU。AP即Application Processor,所有的用户界面以及App都是运行在AP上的。BP级Baseband Processor,手机射频都是运行在这个CPU上的。而一般我们说的耗电,PowerProfile里面的CPU其实是AP。

CPU耗电无非两种情况,一种是长期频繁唤醒,原本可以仅仅在BP上运行,消耗5mA左右,但是因为唤醒,CPU(AP)就会运作,不同手机情况不一样,至少会导致20-30mA左右的耗电;
另一种就是CPU长期高负荷,例如App退出到后台的时候没有停止动画,或者程序有退出的死循环等,导致CPU满频、满核的运行。

要说Android唤醒,就需要了解android的几种运行状态:
  • NoPower、Offf和Active基本上都知道,NoPower即没电,Off就是接上电源但没有开机,而Active就是开机之后。

  • Early Suspend:当使用者过一段时间没有动作,或者按下电源键,屏幕变暗的时候。这是重力感应等Sensor也会关闭,但是系统其实依旧处于运行状态。

  • Late Resume:唤醒在Early Suspend被休眠的设备,例如屏幕。比较经典的场景是当有电话打进来了,PowerManagerServer就是写“on”到/sys/power/state来执行last resume的设备。

  • Suspend:当系统刚进入Early Suspend,而且WakeLock已经都release了之后。而所谓唤醒就是让系统从Suspend状态转到Resume work或者Active,或者是从Early Suspend转到Active。怎么做到的?主要靠AlarmManager和wakeLock来完成。下面介绍几个重点。

    1. ArmManager有RTC和ELASPSED两种闹钟,但是前者是绝对时间,后者是相对时间。
    2. ArmManager有WAKEUP和非WAKEUP两种方式。因为后者不会唤醒手机,而是等到手机被其他原因唤醒了,才触发闹钟,所以非WAKEUP方式更省电。
    3. WakeLock是比较复杂的,除了自己App直接需要的WakeLock外,间接使用的或者内核使用的WakeLock还有一大堆。例如应用间接调用Media Server播放音乐的时候,也会WakeLock。网络不稳定,IP不断续租的时候,会触发wlan_rx_wake的WakeLock,所以四处是坑。
    4. 除了WakeLock,为了确保Wi-Fi不休眠,还有WifiLock。在一些手机上面要配合WakeLock一起使用才能确保Wi-Fi不会休眠。

另一种耗电情况就是CPU本身高负荷。虽然大部分的Power_profile都不靠谱,观察这些PowerProfile会发现一个规律,耗电在频率走向高位的时候会被放大,也就是随着CPU工作频率的提高,耗电速度明显加快。因此让CPU高负荷工作是耗电的一个重要原因。

需要注意点:GPS耗电处于工作状态的时间长短,直接决定了它的耗电。所以应用不要动不动就请求地理位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值