android电量优化(一)
2017-05-18 11:20
176 查看
网络优化
1、网络请求之前,检查网络连接。没有网络连接不进行请求
2、判断网络类型,针对特定的数据在特定的网络下请求。例如:大量数据传输的时候,在wifi下请求。wifi下下载数据耗电量只有2、3、4G的1/3.
3、使用效率高的解析工具。根据具体业务数据量的大小,选择合适的解析工具。例如android上面的协议解析一般推荐json。
4、使用GZIP压缩方式下载数据,能减少网络流量,缩短下载时间
5、合理使用缓存,避免重复操作
6、使用推送,代替循环请求
7、触发网络请求的操作,每次都会保持无线信号持续一段时间,我们可以把零散的网络请求打包进行一次操作,避免过多的无线信号引起的电量消耗。
8、使用JobScheduler ,它会根据当前的情况与任务,组合出理想的唤醒时间,例如等到正在充电或者连接到WiFi的时候,或者集中任务一起执行。
自Android 5.0发布以来,JobScheduler 已成为执行后台工作的首选方式,其工作方式有利于用户。
应用可以在安排作业的同时允许系统基于内存、电源和连接情况进行优化。
JobSchedule的宗旨就是把一些不是特别紧急的任务放到更合适的时机批量处理。这样做有两个好处:
避免频繁的唤醒硬件模块,造成不必要的电量消耗。
避免在不合适的时间(例如低电量情况下、弱网络或者移动网络情况下的)执行过多的任务消耗电量;
控件优化:
1、对于自定义控件,我们可以通过canvas.clipRect()来帮助系统识别那些可见的区域。这个方法可以指定一块矩形区域,只有在这个区域内才会被绘制,其他的区域会被忽视。
2、避免嵌套太多层控件
3、合理使用include、merge
GC相关优化:
1、android的GC机制:Android里面是一个三级Generation的内存模型,最近分配的对象会存放在Young Generation区域,
当这个对象在这个区域停留的时间达到一定程度,它会被移动到Old Generation,最后到Permanent Generation区域。
2、执行GC操作的时候,任何线程的任何操作都会需要暂停,等待GC操作完成之后,其他操作才能够继续运行。
3、Android系统里面有一个Generational Heap Memory的模型,系统会根据内存中不同的内存数据类型分别执行不同的GC操作。例如,最近刚分配的对象会放在Young Generation区域,
这个区域的对象通常都是会快速被创建并且很快被销毁回收的,同时这个区域的GC操作速度也是比Old Generation区域的GC操作速度更快的。
4、避免GC频繁操作:
a、避免内存抖动;Memory Churn内存抖动,内存抖动是因为大量的对象被创建又在短时间内马上被释放。
b、瞬间产生大量的对象会严重占用Young Generation的内存区域,当达到阀值,剩余空间不够的时候,也会触发GC。
即使每次分配的对象占用了很少的内存,但是他们叠加在一起会增加Heap的压力,从而触发更多其他类型的GC。这个操作有可能会影响到帧率,并使得用户感知到性能问题。
c、避免在for循环,onDraw中创建对象,无法避免的可以创建对象池,然后在不使用的时候释放
5、主动回收java对象,特别是较大的,例如bitmap。减少GC的工作频率
其他:
1、尽量不要使用浮点运算
2、定位可以使用wifi和移动网络基站,不要使用GPS。
参考:
http://www.cnblogs.com/lipeil/p/5222917.html http://www.jianshu.com/p/ded0ed6fac3d
1、网络请求之前,检查网络连接。没有网络连接不进行请求
2、判断网络类型,针对特定的数据在特定的网络下请求。例如:大量数据传输的时候,在wifi下请求。wifi下下载数据耗电量只有2、3、4G的1/3.
3、使用效率高的解析工具。根据具体业务数据量的大小,选择合适的解析工具。例如android上面的协议解析一般推荐json。
4、使用GZIP压缩方式下载数据,能减少网络流量,缩短下载时间
5、合理使用缓存,避免重复操作
6、使用推送,代替循环请求
7、触发网络请求的操作,每次都会保持无线信号持续一段时间,我们可以把零散的网络请求打包进行一次操作,避免过多的无线信号引起的电量消耗。
8、使用JobScheduler ,它会根据当前的情况与任务,组合出理想的唤醒时间,例如等到正在充电或者连接到WiFi的时候,或者集中任务一起执行。
自Android 5.0发布以来,JobScheduler 已成为执行后台工作的首选方式,其工作方式有利于用户。
应用可以在安排作业的同时允许系统基于内存、电源和连接情况进行优化。
JobSchedule的宗旨就是把一些不是特别紧急的任务放到更合适的时机批量处理。这样做有两个好处:
避免频繁的唤醒硬件模块,造成不必要的电量消耗。
避免在不合适的时间(例如低电量情况下、弱网络或者移动网络情况下的)执行过多的任务消耗电量;
控件优化:
1、对于自定义控件,我们可以通过canvas.clipRect()来帮助系统识别那些可见的区域。这个方法可以指定一块矩形区域,只有在这个区域内才会被绘制,其他的区域会被忽视。
2、避免嵌套太多层控件
3、合理使用include、merge
GC相关优化:
1、android的GC机制:Android里面是一个三级Generation的内存模型,最近分配的对象会存放在Young Generation区域,
当这个对象在这个区域停留的时间达到一定程度,它会被移动到Old Generation,最后到Permanent Generation区域。
2、执行GC操作的时候,任何线程的任何操作都会需要暂停,等待GC操作完成之后,其他操作才能够继续运行。
3、Android系统里面有一个Generational Heap Memory的模型,系统会根据内存中不同的内存数据类型分别执行不同的GC操作。例如,最近刚分配的对象会放在Young Generation区域,
这个区域的对象通常都是会快速被创建并且很快被销毁回收的,同时这个区域的GC操作速度也是比Old Generation区域的GC操作速度更快的。
4、避免GC频繁操作:
a、避免内存抖动;Memory Churn内存抖动,内存抖动是因为大量的对象被创建又在短时间内马上被释放。
b、瞬间产生大量的对象会严重占用Young Generation的内存区域,当达到阀值,剩余空间不够的时候,也会触发GC。
即使每次分配的对象占用了很少的内存,但是他们叠加在一起会增加Heap的压力,从而触发更多其他类型的GC。这个操作有可能会影响到帧率,并使得用户感知到性能问题。
c、避免在for循环,onDraw中创建对象,无法避免的可以创建对象池,然后在不使用的时候释放
5、主动回收java对象,特别是较大的,例如bitmap。减少GC的工作频率
其他:
1、尽量不要使用浮点运算
2、定位可以使用wifi和移动网络基站,不要使用GPS。
参考:
http://www.cnblogs.com/lipeil/p/5222917.html http://www.jianshu.com/p/ded0ed6fac3d
相关文章推荐
- 小谈Android应用的电量消耗和优化策略
- Android应用的电量消耗和优化的策略
- Android性能优化之电量篇
- Android性能优化之电量优化
- android进阶----性能优化----电量优化
- 【Android Training - Performance】优化电池续航能力[Lesson 1 - 监测设备的电量与充电状态]
- 一、Android性能优化(渲染机制、内存与GC、电量优化)带工具找问题
- Android App性能优化步骤及电量优化与service优化
- Android学习十二周_内存、视图和电量优化
- Android 电量优化
- Android性能优化之电量篇
- Android性能优化之电量篇
- Android设备的电池续航时间优化(Optimizing Battery Life)——(一)监听电池电量和电池的充电状态
- Android性能优化之电量篇
- android 性能优化-电量篇
- Android应用的电量消耗和优化的策略
- Android应用的电量消耗和优化的策略
- Android-性能优化之电量篇
- android电池电量优化
- Android开发——JobScheduler机制以及Android电量优化