CrazyDailyQuestion icon indicating copy to clipboard operation
CrazyDailyQuestion copied to clipboard

2019-10-17: 说说你们企业app耗电原因,以及如何监测和优化?

Open MicroKibaco opened this issue 6 years ago • 1 comments

MicroKibaco avatar Oct 17 '19 11:10 MicroKibaco

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信息,以及前后台辅助信息也能带上

  • 插桩
  1. 常用的有ASM、Aspectj 这两种插桩方案 ;需要深入理解这两种方案,暂时不过分研究
  2. FB 开源的 Battery-Metrics 监测的数据是非常完美的

参考资料

MicroKibaco avatar Oct 17 '19 12:10 MicroKibaco