`
MyEyeOfJava
  • 浏览: 1149872 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7af2d6ca-4fe1-3e9a-be85-3f65f7120bd0
测试开发
浏览量:71078
533896eb-dd7b-3cde-b4d3-cc1ce02c1c14
晨记
浏览量:0
社区版块
存档分类
最新评论

[Android]电量优化之app算法

阅读更多
针对Android的电量优化,应该是很多开发者最关心的几大问题之一。
最近我正在看相关的资料,希望跟大家一起探讨学习。

关于电量,我们最需要处理的问题就是两个方向:
(1)第三方APP和系统本身是如何获取电量值并展示的?我们能否针对他们的算法做适度优化?或者规避部分统计?
(2)其他代码级别优化。从业务逻辑出手,架构上适度调整的手段有哪些?

就上面2个问题,我们开始展开讨论:
(1)APP获取电量算法。
经过查看源码,以及各种资料。最后我们看到app计算电量的算法如下:

在主Activity里面 info.getBatteryStats() 就搞定了。 首先 load(),如果load失败,走CPU时间计算,通过getAppListCpuTime这样函数。 1
CPU的时间计算,有3个核心步骤:
1 ActivityManager遍历runningApp进程,获取对应pid
2 getAppProcessTime(pid)通过读取/proc/pid/stat文件,拿取APP在CPU的运行时间。
3 重新为BatterySipper附值:+time;
2

获取APP消耗 processAppUsage();也分三步走:
1 通过PowerProfile 获取cpu的速度层次(speedsteps),方便后面使用
2 根据不同CPU的速度等级,计算cpu在某个速度下的电量,mA毫安
3

mPowerProfile.getAveragePower(PowerProfile.POWERCPUACTIVE,p)
很多地方都用刀这个API获取power。
那它究竟做了些什么呢?
查看系统源码可以知道:
实际上这句话是获取1个叫PowerMap的数据结果,获得电量。而PoweMap的赋值,是来源于com.android.internal.R.xml.powerprofile 的文件。
关于该文件的获取 android-版本号/core/res/res/xml/powerprofile.xml

计算各种耗电量的详细算法是:
(1)计算CPU
BatteryStateImpl.getUidStats()获取数据源
遍历数据源,得到ProcessState
通过ProcessState拿到以下几个指标
userTime
systemTime
foregroundTime
CpuFgTime(cpuFgTime+= foregroundTime10;)
cpuTime (cpuTime+=tmpCpuTime)
tmpCpuTime=(userTime + systemTime)10

      power +=processPower
4

(2)计算wake lock
wakelock,只关心partial的类型
同样地,通过uid获取wakelock的信息 u.getWakelockStats()

     遍历这个map,获取wakeTime次数
     wakelock.getWakeTime(BatteryStats.WAKE_TYPE_PARTIAL);

     计算总耗时 wakelockTime += timer.getTotalTimeLocked(uSecTime,which);
     计算总电量 poewer+=
6
(3)数据通信的消耗
7
(4)wifi运行消耗
8
(5)传感器等等

processMiscUsage()
9
以wifi为例,是所以wifi的电量(wifi使用电量+appwifi使用电量)
addwifiusage()为例子:
long onTimeMs = mStats.getWifiOnTime(uSecNow, mStatsType) / 1000; //获取wifi总时间
long runningTimeMs = mStats.getGlobalWifiRunningTime(uSecNow, mStatsType) / 1000; //获取wifi运行时间
runningTimeMs -= mAppWifiRunning;//这里计算的是非app使用wifi的量(时间)

double wifiPower = (onTimeMs * 0 * mPowerProfile.getAveragePower(PowerProfile.POWERWIFION) + runningTimeMs
* mPowerProfile.getAveragePower(PowerProfile.POWERWIFION)) / 1000;//时间*电量==毫安时

为了方便各位学习,我把Demo也上传上来,希望对大家阅读有所帮助。
分享到:
评论
1 楼 sundyplx 2015-01-29  
你好:
Android系统4.4本版以后不能是batteryinfo服务了,不知道博主有其他方法可以继续使用batteryinfo服务吗?

相关推荐

    基于Android 计步器app设计与实现源码.zip

    Android系统的IntentService或JobScheduler可以用于实现后台计步功能,同时需要注意电量和性能优化,避免过度消耗资源。 六、文档与视频教程 压缩包中的".doc"文件可能包含了项目的设计文档和开发指南,详细描述了...

    移动App性能评测与优化 - 腾讯TMQ

    5. **电量消耗**:优化电池使用是移动App不可或缺的一部分,通过限制后台活动、优化网络请求和减少传感器使用等方法可以降低电量消耗。 6. **数据流量**:对于依赖网络的App,控制数据流量对用户非常重要。优化网络...

    移动App性能评测与优化

    移动App性能评测与优化是移动应用开发领域中的关键环节,特别是在Android平台上,因为用户体验往往取决于应用的响应速度、稳定性及资源消耗。这份PDF文件详细探讨了如何评估和改进移动App的性能,确保其在Android...

    Android手机管家源码.rar

    Android手机管家是一款针对Android平台设计的系统优化与安全管理应用,它集合了清理垃圾、内存加速、病毒查杀、电池管理等多种功能,旨在为用户提供一个安全、高效的手机环境。本文将从源码角度出发,深入探讨其背后...

    2019华为杯扫地机器人Android APP程序.zip

    9. **性能优化**:为了确保APP运行流畅,开发者需要关注内存管理、UI性能优化、电量消耗等。 10. **数学建模**:在算法设计和问题解决过程中,数学建模起到了关键作用,比如利用概率论分析避障策略,或者应用图论...

    App性能评测与优化

    通过分析CPU使用情况,找出导致高负载的代码段,进行算法优化或任务异步处理,可以显著降低CPU使用率。 3. **电量消耗**:现代用户关心App对设备电池的影响。优化网络连接、后台任务和传感器使用,可以减少电量消耗...

    仿QQ聊天安卓APP

    【标题】"仿QQ聊天安卓APP"是一款基于Android平台开发的聊天应用,旨在模拟QQ聊天的功能和用户体验。这款应用展示了如何在Android环境下构建一个类似QQ的即时通讯软件,让用户能够体验到与QQ类似的聊天功能。 ...

    基于Android校园新闻APP开发的设计 开题报告(1).docx

    在用户至上的时代,在体验经济的时代,一个好的新闻APP可以在内容满足用户的同时,还给用户带来最便利的生活服务、最智能的算法推荐、最完美的用户体验。 二、校园新闻APP的需求分析 从目前获得消息的各种渠道来...

    Android面试题大全(中高级)

    此外,还涉及了App的性能优化,如启动速度优化、绘制优化和电量优化。对于网络安全、WebView加载性能优化以及自定义View的优化也是考察面试者深度理解和实践能力的重要方面。 这部分内容还提到了如何使用注解框架,...

    Android秋招面试指南

    7. 性能优化:包括Android性能优化总结、电量优化等。 8. Android特定功能:如Bitmap压缩策略、Context详解、全局异常处理、虚拟机及编译过程、Apk安装过程、PopupWindow与Dialog的区别等。 9. 开源框架解析:如...

    Android-Wire的Android客户端

    10. **性能优化**:对于Android App,性能优化是必不可少的,包括内存管理、CPU使用率优化、电量消耗控制等,以提供流畅的用户体验。 综上所述,构建一个像Wire这样的Android客户端需要全面的Android开发技能,包括...

    基于android的GPS系统

    这可能涉及地图数据的本地缓存和算法优化。 10. **隐私保护**:处理位置信息必须遵循隐私法规,确保用户知情并允许数据的收集和使用。应用可能需要提供隐私设置,让用户控制自己的位置数据。 11. **测试与调试**:...

    型男计划APP(android)--我的毕业设计.zip

    8. **性能优化**:考虑到Android设备的多样性,开发者需要关注内存管理、启动速度优化、电量消耗控制等方面,以确保APP在各种设备上运行流畅。 9. **测试与发布**:在完成开发后,需要进行单元测试、集成测试和压力...

    50 Android Hacks.pdf

    - **应用商店优化**:通过优化ASO(App Store Optimization)策略提高曝光率; - **渠道统计**:利用第三方统计工具追踪不同渠道下载量,以便更精准地进行市场投放; - **用户反馈收集**:建立有效机制收集用户反馈...

    android应用源码(精)GPS定位测速源码-IT计算机-毕业设计.zip

    - 电量优化:合理设置定位间隔和定位精度,减少电池消耗。 7. **事件处理与异步编程** - 使用`LocationCallback`:异步接收位置更新,避免阻塞主线程。 - `Handler`或`LiveData`:用于在定位服务和UI之间传递...

    App性能测试工具.zip

    - **电池消耗**:评估App运行时的电量消耗,优化能源效率。 - **稳定性**:测试在长时间运行或极端条件下,App是否能够保持稳定,不出现崩溃或异常。 2. **性能测试工具**: - **模拟器/真机测试**:使用Android...

    Android技术专题

    15. **Android性能优化**:包括内存优化、CPU使用率优化、电量优化和渲染优化。例如,避免内存泄漏、减少不必要的计算和使用内存高效的算法。 16. **单元测试和UI测试**:确保应用质量的重要手段,JUnit和Espresso...

Global site tag (gtag.js) - Google Analytics