美文网首页
后台耗电分析

后台耗电分析

作者: 码上述Andy | 来源:发表于2019-06-22 09:31 被阅读0次

    一. 概述

    为了在待机模式下,减少过多的电量消耗,影响手机的续航时间,进入华为app白名单。

    二. Android模块耗电项

    系统耗电统计:

    path: com.android.internal.os.BatteryStatsHelper#processAppUsage


    image.png

    由此可以看出以下是耗电大头:
    (1) 显示器(led&lcd)
    (2) 网络(数据+wifi)
    (3) CPU
    其次:音频、蓝牙

    三. 分析方法及检测工具

    1.Battery Historian--Android系统耗电检测分析工具

    *Battery Historian可以展示手机耗电的一段时间的过程。

    (1) 环境配置步骤:

    配置Python、go环境。
    

    下载Battery Historian。

    (2) 工具使用及数据获取:

    adb shell dumpsys batterystats --enable full-wake-history
    adb shell dumpsys batterystats –reset
    adb bugreport > bugreport.txt
    go run cmd/battery-historian/battery-historian.go
    

    浏览器输入:http://localhost:9999/ 添加刚才的文件,最后submit,如下图:

    image.png
    image.png

    (3)关键指标说明:

    Cup runing:Cpu是否运行
    Wifi runing:WiFi是否运行
    Wifi Radio:是否WiFi数据传输
    Wifi Scan:WiFi是否扫描
    Screen:是否开启屏幕
    Network connectivity:网络连接状态
    Activity manager proc:活跃的进程
    Wifi signal strength:Wifi信号强度
    Charging on:是否充电
    Battery level:电量
    Mobile network type:移动网络类型
    Mobile signal strength:移动信号强度

    2.TraceView-性能分析工具

    (1) trace 获取3种方式

       #DDMS-start Method Profiler
       #Android Profiler—cpu栏,dump
       #Debug.startMethodTracing(“tra.trace”)/stopMethodTracing()-(adb      pull sdcard/tra.trace)
    

    (2)工具介绍

    image.png
    TraceView分为两部分:

    线程时间片面板(时间和线程)
    分析面板(具体方法消耗)

    分析面板函数说明:

    Parents:调用该方法的方法
    Children:被该方法调用的方法

    (3) 关注指标:

    Calls+Recur Calls/Total:方法调用次数+递归调用次数
    Cpu Time/Call:方法每次调用cpu的耗时

    (4) 具体分析方法:

    *分析色块:同一个函数颜色一样,频繁出现一样的色块可能会问题。
    *分析函数调用次数:Calls+Recur Calls/Total和Cpu Time/Call 函数频繁递归调用可能会有问题。


    image.png

    3. dmTraceDump

    (1)生成分析文件的HTML-列出函数调用信息

    /Users/zhouwen/Library/Android/sdk/platform-tools/dmtracedump –h traceA.trace > traceB.trace
    *Inclusive


    image.png

    *Class


    image.png

    (2)生成函数调用图-可以展示出函数调用(被调用及调用的子方法)

    /Users/zhouwen/Library/Android/sdk/platform-tools/dmtracedump –g output_trace.png traceA.trace


    image.png
    image.png

    函数名(Inclusive,Exclusive,Calls)

    (1) 生成trace对比HTML-可以对比出两个trace函数耗时以及调用次数。
    /Users/zhouwen/Library/Android/sdk/platform-tools/dmtracedump –d traceA.trace –h traceB.traceB
    对比结果:


    image.png

    4. 线程监控和评测浏览(Update Threads)

    Threads可以查看当前进程所有线程的活动状态。


    image.png
    image.png
    Theads说明:

    Name:线程名
    stime:执行系统逻辑累计耗时
    utime:执行用户逻辑累计耗时
    Status:线程运行状态
    Tid:线程id
    id:虚拟机分配的Id

    Status状态说明:

    Runnable:就绪状态
    Wait:等待
    Vmwait:等待虚拟机
    Native:执行native代码
    Sleeping:执行Thread.sleep()后
    Starting:线程正在启动
    Running:运行状态

    四.优化前后效果对比

    优化前:

    image.png
    image.png
    image.png

    优化后:

    image.png

    五.建议

    网络:

    1.移动网络情况下减少发包频率,网络异常重试机制。
    2.发送数据量很大的情况下,建议在WiFi环境下进行,发送的数据建议压缩。
    3.尽量避免使用静态网络广播,被动接受系统网络广播会消耗电量。

    其他:

    1.Socket心跳重试机制轮询, 定时器,动效等不需要的时候必须要停止掉。
    2.使用WakeLock机制,会是CPU一直处于运行状态,在不需要的时候必须release掉。
    3.使用JobScheduler异步任务调度, 可以将一些不紧急的任务放在合适的时机再进行触发,这样可以节省不少电量。
    4.Doze模式来限制后台大部分任务运行。

    Google官网针对电池续航时间的优化建议:

    Google battery opt: https://developer.android.com/training/monitoring-device-state/battery-monitoring

    相关文章

      网友评论

          本文标题:后台耗电分析

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