- 数据类型(不要使用比需求更占空间的基本数据类型)
- 循环尽量用foreach,少用iterator,自动装箱尽量少用
- 数据结构与算法的优化处理
- 枚举优化
枚举的缺点:
1. 每一个枚举值都是一个单例对象,在使用它时会增加额外的内存消耗,所以枚举相比与 Integer 和 String 会占用更多的内存
2. 较多的使用 Enum 会增加 DEX 文件的大小,会造成运行时更多的IO开销,使我们的应用需要更多的空间
3. 特别是分dex多的大型APP,枚举的初始化很容易导致ANR
枚举优化的例子:
public class SHAPE {
public static final int RECTANGLE=0;
public static final int TRIANGLE=1;
public static final int SQUARE=2;
public static final int CIRCLE=3;
@IntDef(flag=true,value={RECTANGLE,TRIANGLE,SQUARE,CIRCLE})
@Target({ElementType.PARAMETER,ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.SOURCE)
public @interface Model{
}
private @Model int value=RECTANGLE;
public void setShape(@Model int value){
this.value=value;
}
@Model
public int getShape(){
return this.value;
}
}
- 字符串的连接尽量少用+
- 重复申请内存的问题
同一个方法多次调用,如递归函数 ,回调函数中new对象,读流直接在循环中new对象等
不要在onMeause() onLayout() onDraw() 中去刷新UI(requestLayout)
- 避免GV回收将来要重用的对象
- activity组件泄漏
1. 非业务需要不要把activity的上下文做参数传递,可以传递application的上下文
2. 和activity有关联的对象写出static
3. 非静态内部类和匿名内部类会持有activity引用(建议大家单独写个文件)。可以使用弱引用处理
4. 单例模式持有activity引用
5. handler PostDelayed问题。如果开启的线程需要传入参数,用弱引用可以解决问题。handler记得清除
6. removeCallbackAndMessage(null)
- 尽量使用IntentService而不是service