-
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;如果嵌套还是用RelativeLayout2、采用<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等,他们具有更好的性能
适当使用软引用
采用内存缓存和磁盘缓存
尽量采用静态内部类,这样可以皮面潜在的由于内部类导致的内存泄露
网友评论