美文网首页
APP电量优化

APP电量优化

作者: Coder_Sven | 来源:发表于2020-04-20 11:19 被阅读0次

通过google的开源工具Battery-Historian来进行分析电量消耗

工具开源地址: [https://github.com/google/battery-historian]

安装Battery Historiany的方式有两种。

分别为Docker与源码编译安装。

Docker安装

Docker有Community Edition (CE 社区版) and Enterprise Edition (EE 企业版)两种版本。我们使用社区版就可以了。

1587347717446.png

安装好Docker之后,github上让我们运行

1587347836597.png

但是这个地址貌似需要翻墙。我们可以使用镜像

docker run --name=battery -d -p 9999:9999 bhaavan/battery-historian

一段漫长的等待……

然后

1587347945655.png

表示启动成功了

源码编译安装

需要存在go、git、python与java环境。

对于linux/Mac一般默认会携带python与git,如果不存在或者版本不正确也可以(brew install)。

sudo apt-get install golang

sudo apt-get install git

sudo apt-get install python2.7

安装go

Go 和java一样是一个编程语言,并且是开源的。因为Battery Historiany使用了go来开发,所以我们需要安装go环境。

​ 我们需要安装go,最低需要 1.8.1的版本

https://golang.org/dl/

选择自己需要安装的系统下载。第二列的Kind表示类型,有source源码(需要自己编译安装)、Installer安装器(下一步、下一步安装)与Archive编译好的(需要配置环境变量)。

1587348476126.png

安装完成后,使用go version

1587348537348.png

我们需要确保能够调起go工具,否则需要配置go环境变量。

Git工具

按照官网提示来进行安装就可以了

安装Python

python必须使用2.7的版本,

https://www.python.org/downloads/

1587348798108.png

安装完成可以使用python –V 检查是否安装成功。

安装 java

java没什么好说的了。下载安装,配置环境变量……

运行

4个工具都安装完成之后,我们就可以下载BH源码并运行了

我们进入GOPTAH目录,下载源码与其依赖:

1587348989899.png

然后我们运行bh

1587349015880.png

然后我们可以访问

[http://localhost:9999/]

1587349167519.png

如何进行电量优化

  • 屏幕亮暗相关
  • 设备 awake,sleep 的切换,尤其是唤醒.
  • CPU 运行相关
  • 网络
  • 传感器

监听是否在充电

    /**
     * 是否正在充电
     * @return
     */
    public static boolean isPlugged(Context context){
        //发送个包含充电状态的广播,并且是一个持续的广播
        IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        Intent intent = context.registerReceiver(null,filter);
        //获取充电状态
        int isPlugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
        boolean acPlugged = isPlugged == BatteryManager.BATTERY_PLUGGED_AC;
        boolean usbPlugged = isPlugged == BatteryManager.BATTERY_PLUGGED_USB;
        boolean wifiPlugged = isPlugged == BatteryManager.BATTERY_PLUGGED_WIRELESS;
        return acPlugged || usbPlugged || wifiPlugged;
    }

我们可以通过判断当前手机充电状态去决定是否处理某些任务。比如:360 手机助手,当充上电的时候,才会自动清理手机垃圾,自动备份上传图片、联系人 等到云端,从而避免当用户手机低电量时,任然继续进行耗电操作。

WakeLock

wake_lock 锁主要是相对系统的休眠而言的,意思就是程序给 CPU 加了这个锁那系统就不会 休眠了,这样做的目的是为了全力配合我们程序的运行。有的情况如果不这么做就会出现一些 问题。
需要使用 PowerManager 这个系统服务的唤醒锁(wake locks)特征来保持 CPU 处于唤醒状 态。唤醒锁允许程序控制宿主设备的电量状态,创建和持有唤醒锁对电池的续航有较大的影 响,所以,除非是真的需要唤醒锁完成尽可能短的时间在后台完成的任务时才使用它。比如在 Acitivity 中就没必要用了。

只有一种合理的使用场景,使用后台服务在屏幕关闭情况下 hold 住 CPU 完成一些工作,需要 使用唤醒锁,如果不使用唤醒锁来执行后台服务,不能保证因 CPU 休眠未来的某个时刻任务 会停止,这不是我们想要的。

        PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
        //只唤醒cpu
       PowerManager.WakeLock locationLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "location_lock");
       //使CPU一直处于工作状态,手动调用release来关闭
        locationLock.acquire();

注意:在使用该类的时候,必须保证 acquire 和 release 是成对出现的。不然当我们业务已经不需要时, 当 CPU 处于唤醒状态,这个时候就会损耗多余的电量。

JobScheduler

自 Android 5.0 发布以来,JobScheduler 已成为执行后台工作的很好的方式,其工作方式有 利于用户在适当的时机执行正确的事情。应用可以在安排作业的同时允许系统基于内存、电源 和连接情况进行优化。JobSchedule 的宗旨就是把一些不是特别紧急的任务放到更合适的时机 批量处理。这样做有两个好处:

  • 避免频繁的唤醒硬件模块,造成不必要的电量消耗。
  • 避免在不合适的时间(例如低电量情况下、弱网络或者移动网络情况下的)执行过多的
    任务消耗电量。

GPS

选择合适的 Location Provider

Android 系统支持多个 Location Provider:

  • GPS_PROVIDER: GPS 定位,利用 GPS 芯片通过卫星获得自己的位置信息。定位精准度高,一般在 10 米左右, 耗电量大;但是在室内,GPS 定位基本没用。
  • NETWORK_PROVIDER: 网络定位,利用手机基站和 WIFI 节点的地址来大致定位位置,这种定位方式取决于服务器,
    即取决于将基站或 WIF 节点信息翻译成位置信息的服务器的能力。
  • PASSIVE_PROVIDER: 被动定位,就是用现成的,当其他应用使用定位更新了定位信息,系统会保存下来,该应用接 收到消息后直接读取就可以了。

如果 App 只是需要一个粗略的定位那么就不需要使用 GPS 进行定位,既耗费电量,定位的耗 时也久。

参考代码

[https://github.com/games2sven/Battery_Improve]

相关文章

  • APP电量优化

    通过google的开源工具Battery-Historian来进行分析电量消耗 工具开源地址: [https://...

  • Android 性能优化

    app性能优化 android优化分为: 内存优化 UI优化 电量优化 apk瘦身优化 启动优化 下面通过各种百度...

  • android中的电量优化建议以及Battery Histori

    这篇文章主要是探讨android app的电量使用优化,以及电量使用分析工具battery-historian在w...

  • Android 性能优化之一:Java 内存模型理解

    开篇:APP性能优化涉及很多方面,比如内存优化、启动优化、稳定性优化、电量优化等。其中尤其是对内存的优化尤为...

  • Android内存泄漏的介绍

    我们app性能优化主要涉及到内存优化,电量优化,View的优化。这里对内存优化里的内存泄漏做一个简单的介绍。 一、...

  • 必知必会 | Android 性能优化方面都在这儿[转自鸿洋]

    一般情况下,我们谈性能优化基本上会从以下几个方面: App启动速度优化 UI流畅度优化 内存优化 apk瘦身 电量...

  • Android 性能优化

    一般情况下,我们谈性能优化基本上会从以下几个方面: App启动速度优化 UI流畅度优化 内存优化 apk瘦身 电量...

  • App直播电量优化方案

    一.设备电量消耗情况排查 1.工具 Batterystats工具 ;收集设备电量消耗数据Battery Histo...

  • iOS App 电量消耗优化

    App耗电方式主要分为:1,CPU计算通过方法查看当前CPU使用率,然后获取当前方法堆栈,就可以定位耗电原因。首先...

  • App耗电量优化

    1.获取手机电量信息 通过Instruments获取利用Xcode自带的Energy Log获取iPhone特定时...

网友评论

      本文标题:APP电量优化

      本文链接:https://www.haomeiwen.com/subject/exlrihtx.html