Android性能优化之内存优化

本文介绍如何减少Android应用的内存占用,避免出现Out Of Memory (OOM)错误。通过使用轻量级数据结构、优化Bitmap对象、避免内存泄露及合理设计缓存策略等方法,提升应用性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何避免OOM总结

  • 减小对象内存的占用

    • 使用更加轻量的数据结构:
      考虑使用ArrayMap/SparseArray而不是HashMap等传统数据结构.
      ArrayMap:相比HashMap更节省内存,因为不需要额外的对象实例来记录Maping操作.
      SparseArray:避免了对key与value的自动装箱(autoboxing),并且避免了装箱后的解箱.

    • 避免在Android里使用枚举

    • 减小Bitmap对象的内存占用:
      缩放比例:根据屏幕对图片进行等比例缩放.
      格式解码:选择ARGB_8888/RBG_565/ARGB_4444/ALPHA_8, 存在很大差异.
    • 使用更小的图片
  • 内存对象的重用利用:ObjectPool
    • 复用系统自带的资源:
      比如字符串、颜色、图片、动画、样式以及简单布局等.
  • 避免对象内存泄露
    • 注意Activity的泄露:
      内部类引用导致Activity内存泄露.
      Context被传递到其他实例中.
    • 考虑使用Application Context而不是Activity Context
    • 注意临时Bitmap对象的及时回收
    • 注意监听器的注销
    • 注意缓存容器中的对象泄漏
    • 注意WebView的泄漏
    • 注意Cursor对象是否及时关闭
  • 内存使用策略优化
    • 综合考虑设备内存阈值与其他因素设计合适的缓存大小:
      例如,在设计ListView或者GridView的Bitmap LRU缓存的时候,需要考虑的点有:
      • 应用程序剩下了多少可用的内存空间?
      • 有多少图片会被一次呈现到屏幕上?有多少图片需要事先缓存好以便快速滑动时能够立即显示到屏幕?
      • 设备的屏幕大小与密度是多少? 一个xhdpi的设备会比hdpi需要一个更大的Cache来hold住同样数量的图片。
      • 不同的页面针对Bitmap的设计的尺寸与配置是什么,大概会花费多少内存?
      • 页面图片被访问的频率?是否存在其中的一部分比其他的图片具有更高的访问频繁?如果是,也许你想要保存那些最常访问的到内存中,或者为不同组别的位图(按访问频率分组)设置多个LruCache容器。
    • onLowMemory()与onTrimMemory()
    • 资源文件需要选择合适的文件夹进行存放
    • 谨慎使用static对象
    • 珍惜Services资源
    • 谨慎使用“抽象”编程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值