zoukankan      html  css  js  c++  java
  • android 性能优化-电量篇

    消耗电量的几个主要原因、功能:
    1、大数据量的网络传输(网络)
    2、不停的网络切换(网络)
    3、解析大量的数据(CPU)

    关于网络方面的优化:

    1、网络请求之前,检查网络连接。没有网络连接不进行请求
    2、判断网络类型,针对特定的数据在特定的网络下请求。例如:大量数据传输的时候,在wifi下请求。wifi下下载数据耗电量只有2、3、4G的1/3.
    3、使用效率高的解析工具。根据具体业务数据量的大小,选择合适的解析工具。例如android上面的协议解析一般推荐json。
    4、使用GZIP压缩方式下载数据,能减少网络流量,缩短下载时间
    5、合理使用缓存,避免重复操作
    6、使用推送,代替循环请求
    7、触发网络请求的操作,每次都会保持无线信号持续一段时间,我们可以把零散的网络请求打包进行一次操作,避免过多的无线信号引起的电量消耗。
    8、是JobScheduler API所做的事情。它会根据当前的情况与任务,组合出理想的唤醒时间,例如等到正在充电或者连接到WiFi的时候,或者集中任务一起执行。我们可以通过这个API实现很多免费的调度算法。

     控件:

    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/hanyonglu/p/4244035.html


  • 相关阅读:
    对象池使用时要注意几点
    Flash3D学习计划(一)——3D渲染的一般管线流程
    714. Best Time to Buy and Sell Stock with Transaction Fee
    712. Minimum ASCII Delete Sum for Two Strings
    647. Palindromic Substrings(马拉车算法)
    413. Arithmetic Slices
    877. Stone Game
    338. Counting Bits
    303. Range Sum Query
    198. House Robber
  • 原文地址:https://www.cnblogs.com/lipeil/p/5222917.html
Copyright © 2011-2022 走看看