内存管理技巧、高性能编程技巧

1.使用Service风险,不容易被kill,就会导致进程变得非常消耗内存
官方推荐使用IntentService,可以在执行完任务后关闭进程,避免service内存泄漏
2.当界面不可见时释放内存 重写onTrimMemory
3.避免bitmap使用过度
4.使用优化过的数据集合 如SparseArray,SparseArray,

SparseArray<String> array=new SparseArray<String>();
        array.put(1, "小郭");
5.内存的开支情况
  (1)使用枚举通常会比使用静态常亮消耗两倍以上内存
  (2)任何一个java类,包括内部类,匿名类都要占用大概500字节的内存空间
  (3)任何一个类的实例要消耗12-16字节的内存开支,因此频繁创建实例也会一定程度上影响内存
  (4)在使用HashMap时,即使你只设置领一个基本数据类型的键,比如说int,但是也会按照对象
      的大小来分配内存,大概是32字节,所以进程使用优化过的数据集合
6.反抽象编程理念
  在面向对象的世界里,使用抽像是一种被崇尚 的思想,使用抽象编程会提高代码的维护性与可扩展性
  但是,使用抽象会带来额外的内存开销,因为抽象的编程方法需要编写额外的代码,虽然这些代码
  根本执行不到,但是却要映射到内存中,不仅占用了更多的内存,在执行效率方面也会有所降低
  服务器可以用抽象,因为服务器内存大
  一切以性能,高效为宗旨,请不用滥用抽象编程
7.避免使用依赖注入框架
8.使用ProGuard混淆代码   对代码有压缩和优化代码的功能。(在tools文件夹下边)
9.使用多个进程
  在AndroidManifest文件的应用程序组件中声明一个Android:Process属性

  高性能编码技巧:
 1.避免创建不必要的对象
 下面是避免创建对象的场景

  (1)如果我们有一个需要拼接的字符串,那么可以优先考虑使用StringBuffer或者StringBuilder来进行拼接
  (2)尽量使用基本数据类型而不使用封装性数据类型,int比Integer更高效
  (3)如果我们明确的知道调用方法将这个返回String 在进行拼接操作的话,直接返回一个stringBuffer
  (4)基本数据类型要优于对象数据类型,类似的,基本数据类型的数组也优于对象数据类型的数组。两个平行的数组
  要比一个封装好的对象数组更高效
  一个基本原则就是尽可能少创建临时对象,越少的对象意味着越少的GC操作,同时也就意味着越好的程序性能和
  用户体验
  2.静态优于抽象
  静态方法调用的速度提升15%-20%,同时也不用为了调用这个方法而专门去创建一个对象。另外这也是一种好的编程
  习惯。因为我们可以放心得调用静态方法,而不用担心调用这个方法后是否改变对象的状态(静态方法内无法访问非静态的字段)
  3.对常量使用static  final修饰符
  这种优化方法只对基本数据类型以及String 类型的常量有效
  4.避免在内部使用getter和setter方法(看情况)
  因为字段搜寻要比方法调用使用效率高的多,我们直接访问某个字段可能要比通过getter方法去访问这个
  字段要快3-7倍
  5.使用增强for循环语句(看情况)
  用ArrayLsit,手写计数循环要快3倍
  int count=a.length;
    for(int i=0;i<count;i++){

    }
   6.考虑包而不是私有的内部类访问
   当一个类的内部类想访问这个类的私有有属性时,在编译时就会产生多于的静态方法,所以通过声明被内部
   类方法的字段或者或者成员为包访问权限(private改public)
   7.避免使用浮点数。浮点数比整型慢两倍
   8.多使用系统封装好的API
   9.使用实现类比接口好
   Map a=new HashMap();
   HashMap b=new HashMap();推荐写法
   调用一个接口的引用会比调用实体类的引用多花费一倍的时间
   10将成员变量缓存到本地
   访问成员变量时,如果将它缓存到本地,成员变量的访问就会变成效率更高的栈变量访问
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值