浅谈Android开发中的内存优化

Android开发中,常常需要对App进行性能优化,这其中很重要的一点是进行内存优化,避免出现出内存泄露、内存溢出、内存空间占用过大等问题。虽然Java有自动回收的机制,可是这不意味着Java中不存在内存泄漏的问题,而内存泄漏会很容易导致严重的性能问题。内存泄漏指的是那些程序不再使用的对象无法被GC识别,这样就导致这个对象一直留在内存当中,占用了宝贵的内存空间。显然,这还使得每级Generation的内存区域可用空间变小,GC就会更容易被触发,从而引起性能问题。

内存泄漏出现的常见情况

  • 单例中引用的上下文Context,引用了Activity中的Context, 这样会造成内存泄漏,要引用Application中的Context;
  • 资源性对象未关闭。比如Cursor、File文件等,往往都用了一些缓冲,在不使用时,应该及时关闭它们。
  • 注册对象未注销。比如事件注册后未注销,会导致观察者列表中维持着对象的引用。类的静态变量持有大数据对象。
  • 非静态内部类的静态实例。
  • Handler临时性内存泄漏。如果Handler是非静态的,容易导致 Activity 或 Service 不会被回收。
  • 容器中的对象没清理造成的内存泄漏。
  • WebView。WebView 存在着内存泄漏的问题,在应用中只要使用一次 WebView,内存就不会被释放掉。

怎样进行内存优化

  • 对象引用。强引用、软引用、弱引用、虚引用四种引用类型,根据业务需求合理使用不同,选择不同的引用类型。
  • 减少不必要的内存开销。注意自动装箱,增加内存复用,比如有效利用系统自带的资源、视图复用、对象池、Bitmap对象的复用。
  • 使用最优的数据类型。比如针对数据类容器结构,可以使用ArrayMap数据结构,避免使用枚举类型,使用缓存Lrucache等等。
  • 图片内存优化。可以设置位图规格,根据采样因子做压缩,用一些图片缓存方式对图片进行管理等等。

内存优化分析工具

  • MAT(Memory Analysis Tools)
  • Heap Viewer
  • Allocation Tracker
  • Memory Monitor
  • LeakCanary
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容