美文网首页
Android 性能优化

Android 性能优化

作者: 满天星爱我 | 来源:发表于2018-02-25 17:40 被阅读5次
    • ListView和Bitmap优化
      listView:
      1 采用ViewHolder并且避免在getView中执行耗时操作,
      2 要更具列表滑动状态来控制任务的执行频率,比如当初列表快速滑动时显然是不太适合开启大量的一部任务
      3、开启硬件加速来是ListView变得更加流畅
      Bitmap:
      Bitmap的优化主要是通过BitmapFactory.Options来更加需要对图片进行采样,采样过程中主要用到了BitmapFactory.Options的inSampleSize参数

    • 单例-延迟加载

      第一种:非延迟加载单例类
      第二种:同步延迟加载
      第三种:双重检测同步延迟加载
      第四种:使用ThreadLocal修复双重检测
      第五种:使用内部类实现延迟加载
      为了做到真真的延迟加载,双重检测在Java中是行不通的,所以只能借
      助于另一类的类加载加延迟加载:

        public class Singleton {  
          private Singleton() {}  
          public static class Holder {  
          // 这里的私有没有什么意义  
          /* private */static Singleton instance = new Singleton();  
          }  
          public static Singleton getInstance() {  
         // 外部类能直接访问内部类(不管是否是静态的)的私有变量  
               return Holder.instance;  
          }  
       }
      
    • 布局优化

      1、善用相对布局RelativeLayout,LineraLayout
      如果布局是在有RelativeLayout、LineraLayout,就用LineraLayout,RelativeLayout更耗费CPU;如果嵌套还是用RelativeLayout

      2、采用<include>、<merge>、<ViewStub>标签

    • 线程优化

      尽量使用线程池,避免大量使用Thread,线程池可以重用内部的线程,避免了线程的创建和销毁带来的性能开销,还能有效的控制线程池的最大并发数,避免占用系统资源从而导致阻塞现象的发生。

    • 内存泄露优化

      1、静态变量造成的内存泄漏,如activity里面有静态变量,导致activity无法销毁
      2、单例模式导致内存泄露,单例模式的特点是起生命周期和Application保持一致,因此activity无法及时释放
      3、属性动画导致内存泄露,属性动画是安卓3.0开始,Google提供的,属性动画有一类无限循环的动画,如果在Activity中播放没有onDestroy中停止动画,那么会一直播放下去,解决办法在Activity中onDestroy方法调用animator.cancel()停止动画

    • 优化建议

      避免创建过多的对象
      不要使用枚举,枚举占用的内存空间要比整型大
      常量尽量使用static final来修饰
      使用Android特定的数据结构,比如SparseArray和Pair等,他们具有更好的性能
      适当使用软引用
      采用内存缓存和磁盘缓存
      尽量采用静态内部类,这样可以皮面潜在的由于内部类导致的内存泄露

    相关文章

      网友评论

          本文标题:Android 性能优化

          本文链接:https://www.haomeiwen.com/subject/cgirxftx.html