安卓性能优化

内存泄漏:使用的内存,没有及时释放,可能会导致内存溢出.
内存溢出:使用的内存超过了堆栈内存,会抛出OOM异常,导致程序崩溃.

1.了解内存的开支情况
(1).枚举可以限制我们的选择,方便快捷,但是使用枚举要比使用静态常量要消耗两倍以上的内存,在Android开发中尽量不使用枚举.
(2).使用java类,包括匿名类,内部类,都要占用500字节的内存空间.
(3).创建任何一个类的实例都要消耗12 - 16字节的内存开支,频繁的创建实例也会影响内存的开支.
(4).在使用HashMap中,即使以基本类型作为key比如int类型,但是也会按对象的大小来分配内存,大概为32字节,不是4个字节.最好使用Android优化过的集合.
2.不要滥用抽象的编程,Android世界里以性能,高效为宗旨.

3.**尽量少用依赖注入的框架,这些框架为了搜寻代码中的注解,需要较长的初始化过程,并且一些用不到的对象也会加载到内存
中,这些用不到的对象会一直存放在内存中,可能过很久才会释放掉**.
4.
要拼接字符串时,尽量不用使用String类,因为String类时不可变的,String的每一次拼接都在创建一个对象,尽量使用StringBuffer和StringBuilder,单线程中使用StringBuilder,因为StringBuilder不是线程同步的,效率比较高.StringBuffer时线程同步的,适合多线程的时候使用.
“从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。” ——-摘自java API文档
记住一句话 :
单线程中使用StringBuilder速度更快.单线程效率 StringBuilder(线程不同步) >StringBuffer(线程同步) >String
5.尽量使用基本类型代替包装类型,比如 int比Integer更高效,其他也一样.
6.静态优于抽象
7.对常量使用 static final修饰符
当只使用 static的时候 比如 static int i = 0; 编译器编译的时候会为上述代码生成一个方法,会在此类使用的时候调用这个方法,然后给字段进行赋值.复制后通过字段搜寻的方式访问具体的值.修改之后 static final 不在定义方法直接指向.这种方式只对基本数据类型和String有效,并且使用这种方式是一种非常好的编程习惯.
8.避免在内部调用setter和getter方法,可以直接使用字段.因为字段搜寻要比方法搜寻高效很多 约3 - 7倍.
9.避免使用浮点数,在Android中浮点数比整型慢2倍.
10.

    (1).Map<String, Object> map = new HashMap<String, Object>();

        (2).HashMap<String, Object> map2 = new HashMap<String, Object>();
    上述代码中,使用(2)要比使用(1)快一倍. **因为调用接口比调用实体类的引用多费一倍的时间.**

11.访问成员变量要比访问本地变量慢得多.尽量把成员变量缓存到本地变量. 比如

public class Test{
    int count =100;

    public void fun(){

        int length =count;//成员变量缓存到本地变量 因为访问成员变量要比访问本地变量慢得多

      for(int i =0 ; i < length ; i++){

            //代码逻辑
        }
    }   
}

类型 : 不要在for循环的第二个条件调用方法.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值