Android 性能优化之内存优化

本文总结了Android性能优化中的内存优化策略,包括数据结构优化如使用StringBuilder替代字符串拼接,使用ArrayMap/SparseArray代替HashMap,避免内存抖动和对象无谓创建。强调了避免内存泄漏的重要性,如使用ApplicationContext,及时关闭Cursor,注意监听器注销和缓存对象管理。针对OOM问题,讨论了图片加载、强引用与软引用的使用,提出了通过onTrimMemory方法适时释放内存的建议,并给出了优化OOM的具体方法,如Bitmap的合理使用,谨慎处理静态对象和Handler,以及优化布局层次等。
摘要由CSDN通过智能技术生成

看各大神的博客总结了一下。

数据结构优化

  • 频繁的字符串怕拼接用StringBuilder ,也就是尽量不要使用String相加 ArrayMap ,SparseArray
    替换HashMap
  • 内存抖动 再小的class也会消耗0.5k的内存,并不是一味的面向对象就好

对象复用

  • 复用系统自带的资源
  • ListView/GridView的congteverView复用
  • 避免在onDraw方法里面执行对象的创建,因为onDraw会频繁调用

避免内存泄漏

  • 内存泄漏:由于代码瑕疵,导致这块内存,虽然是停止不用了。但依然被其他东西引用着,是的GC无法对它进行回收(你认为内存被回收了)
  • 内存泄漏会导致剩余可用Heap越来越少,频繁触发GC,尤其是Activity
  • 用Application Context而不是ACtivity Context(Activity
    Context被传递到其他实例中,这可能导致自身被引用而发生泄漏。)
  • 注意Cursor对象是否及时关闭

note:虽然在大多数情况下,我们会对Bitmap增加缓存机制,但是在某些时候,部分Bitmap是需要及时回收的。例如临时创建的某个相对比较大的bitmap对象,在经过变换得到新的bitmap对象之后,应该尽快回收原始的bitmap,这样能够更快释放原始bitmap所占用的空间。
注意监听器的注销

  • 在Android程序里面存在很多需要register与unregister的监听器,我们需要确保在合适的时候及时unregister那些监听器。自己手动add的listener,需要记得及时remove这个listener。

注意缓存容器中的对象泄漏

有时候,我们为了提高对象的复用性把某些对象放到缓存容器中,可是如果这些对象没有及时从容器中清除,也是有可能导致内存泄漏的。例如,针对2.3的系统,如果把drawable添加到缓存容器,因为drawable与View的强应用,很容易导致activity发生泄漏。而从4.0开始,就不存在这个问题。解决这个问题ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值