应用压入后台时由WebView带来的耗电问题

最近遇到一个应用打开WebApp后,将应用压入后台,出现比较耗电的问题。集合众多同学的智慧之后定位到原因:

在WebKit的内核中会引用从各个平台(android, linux pc, mac)注入的自己的服务比如:

  • DeviceOrientationService
  • DeviceMotionService

而这两个Service在android平台上的实现皆通过注册侦听器到SensorManager来获知来自于加速度器,磁力计的方位、手机姿势数据。

Sensor的使用是极其浪费电力的一件事情,所以就出现了上文所述问题。

解决方法:

1) 在Activity的onPause(), onResume()时调用WebView.onPause(), WebView.onResume()以尽量将JS执行线程以及其他WebCore中的线程给停住

2) 在onStop()时将WebView中当前load的url记住,然后让WebView.loadUrl(“about:blank”),在onStart()时WebView.loadUrl({your_previous_url})

更新:
[2015/11]在最近的工作中还发现一种前端页面带来的耗电问题:当页面加载一些gif或者通过其他方式创建的动画效果,当webview变得不可见后这些动画如果没有被显式关掉,就会导致很严重的耗电问题。同时在桌面浏览器里边我也注意到页面里边持续运行的动画也会导致内存占用增大。