相信大家都还记得前不久“台湾少女长时间用手机打电话后,面部被轻微烫伤”的微博吧,我们随之会有疑问,打个电话为什么会产生如此高的温度?其实这是某些安卓app软件所造成的。这些“问题App”会造成手机卡顿、额外耗电等问题,但为什么会产生这些问题呢?这是因为它的开发人员忽略了代码规范,使得App在后台(用户退出后)仍然大量消耗CPU资源,异常持续时间以让部分型号的Android手机达到较高温度。
这里大概有四类容易导致CPU异常的代码示例:
1、移动广告平台SDK (ex: AdMob)使用规范, 应该只在前台中使用, 退至後台时需要调用释放资源的接口, “AdView.stopLoading()”, 我们分析了许多靠广告收入的免费App, 发现其中有不少App都有CPU过高的问题, 透过分析堆栈, 发现大多有共通之处, 再从其代码分析後定位到开发人员容易忽略调
2、WebView的使用, WebView是Android提供的一个呈现网页的控件, 一样要注意当应用退至後台或是不使用时, 需调用接口暂停执行网页内容, “WebView.onPause()”
3、SensorManager的使用, SensorManager是Android提供的服务让开发者可以取得传感器的资讯, 由於SensorManager是会不断回调给App传感器的值, 是会不断消耗系统资源. 所以当App在使用SensorManager时, 一定要记得App退出後或者不用时, 要调用”SensorManager.unregisterListener”
4、功能型消耗, 我们发现也有不少App是真的想要在後台做一些事情但是占用了太多的系统资源, 以至於手机卡慢甚至耗电, 举例来说Wifi万能钥匙这款App从大数据分析来看, 该应用的Socket线程会不断运作, 最高甚至在後台会消耗40%以上的CPU资源, 这点就得依靠研发人员兼顾应用的功能和效能了。
5.注册了广播和服务等没及时关闭,导致一直在后台运行
6.内存泄漏是一件头疼的事情,内心泄漏过多会导致内存溢出,内存占有率过大会导致发热