谈到如何让程序耗电低,必须要了解什么样的操作最耗电。
1.后台程序唤醒休眠手机
2.大量数据传输
3.网络模式切换
4.解析文字数据没有实时的regex
找到原因以后再归纳解决的办法
网络方面
1.检查网络,等待wifi或者数据连接。只在连接网络时才做更新处理
2.使用高效率的数据格式和解析器
使用 stream 解析替代 tree
多使用二进制格式发送请求
减少往返服务器次数,获得更佳用户体验
尽可能使用GZIP压缩文字数据
前台程序
1.唤醒锁非常重要
选择最底层的锁,加个超时处理,预防不可预料的bug
使用android:keepScreenOn保证正确性
2.回收java对象,特别是复杂的对象
尽管java也有GC机制,最好还是手动处理部分可能产生的垃圾(注意同步问题,在UI线程是安全的)
XmlPullParserFactory 与BitmapFactory
Matcher.reset(newString)
StringBuilder.setLength(0)
在ListView里很好的运用了回收策略
3.使用网络粗定位比GPS消耗低
GPS跟唤醒锁一样,没有释放,将一直运行。
4.浮点运算消耗高
做大量地理经纬度运算时使用microdegrees
// GeoPoint returns value 37392778, -122041944
double lat = GeoPoint.getLatitudeE6() / 1E6;
double lon = GeoPoint.getLongitudeE6() / 1E6;
用DisplayMetrics做运算时,尽量使用缓存。
5.加速传感器,磁性传感器
后台程序
1.Service应该是短暂的,不应该是守护进程(占用内存)
2.使用AlarmManager或者广播唤醒触发(结束时别忘了stopself)
总结:
使用高效的解析方式和GZIP来充分利用网络与CPU资源
用AlarmManager与<receiver>代替"poll"或者"sleep"状态的Service(不使用时将其禁止,再集中唤醒)
在良好的网络状态下进行数据传输
提供用户管理背景的行为