NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
[使用 Memory Profiler 查看 Java 堆和内存分配](https://developer.android.com/studio/profile/memory-profiler.html) 1. 在 Activity 销毁的时候及时停止动画,比如帧动画,会持有 Activity 内部 View 的引用,在 onDestory 的时候,及时 cancel 掉。 2. 不在单例模式里面持有非 Application 的 Context 3. 使用静态内部类创建 Handler 对象,在Activity 销毁的时候移除 CallBack。 4. 及时关闭不使用的资源 5. 对于key为int的HashMap尽量使用SparceArray替代,大概可以省30%的内存,而对于其他类型 6. 对于可以 延迟初始化的页面,使用viewstub 7. 使用 LeakCanary 进行内存泄漏检测,及时的发现问题,解决问题 Bugly 原理: LeakCanary 原理: 会注册对所有 Activirty 的监听,主要可以检测到生命周期,在监听到 onDestroy 调用的时候,会把检测到 Activity 实例关联包装成一个自定义弱引用。 但是这里在使用时,还给指定了一个 ReferenceQuery 队列,该队列的作用就是当发生 GC 时,弱引用所持有的的对象如果被回收,就会进入该队列。 所以只要在 Activity onDestroy 发生时候,把 Activity 对象绑定到 弱引用中,然后手动执行一次 GC,然后观察引用集合 (ReferenceQuery)中是不是包含对应的 Activity 对象,如果不包含,说明内存泄漏。 接着 LeakCanary 会使用开源库 haha 做分析 Android 堆垃圾,并把结果通过通知的方式显示出来。 这就是 LeakCanary 工作的大致原理。