CrazyDailyQuestion
CrazyDailyQuestion copied to clipboard
2019-10-17: 说说你们企业app耗电原因,以及如何监测和优化?
app耗电原因
应用在后台执行一系列占用cpu资源的服务,如:播放视频、需要获取 GPS 信息、推送,进程唤醒操作
优化方案
- 减少因为代码问题长时间获取
WakeLock,WiFi和蓝牙扫描,及时关闭GPS定位服务 - 多模块使用定位尽量使用一次定位结果
- 选择合适的
Location Provider - 网络请求方面,不允许无网络状况下的网络请求
- 尽早适配最新的
Target API
监测方案
Java Hook
ProxyHook().proxyHook(context.getSystemService(Context.POWER_SERVICE), "mService", this
@Override
public void beforeInvoke(Method method, Object[] args) {
// 伪代码
}}
通过 Hook ,我们能将申请资源时候的堆栈信息保存下来,当我们触发某个规则上报问题时,可以收集到堆栈信息,电池是否充电,CPU信息,以及前后台辅助信息也能带上
- 插桩
- 常用的有ASM、Aspectj 这两种插桩方案 ;需要深入理解这两种方案,暂时不过分研究
- FB 开源的
Battery-Metrics监测的数据是非常完美的