我爱编程

内存泄露

2018-04-14  本文已影响21人  黑色海鸥

网上查看总结,侵删。

来自:
https://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650242747&idx=1&sn=88c4d040c439c7db13033e5be18440b7&chksm=88638fd4bf1406c25fa75c04c5853281facd65afad24c57797cf1c2fe3719168810a2bdfd8ea&mpshare=1

内存泄露,内存溢出(OOM), GC概念

内存泄露关键点

复现

用AndroidStudio自带的内存分析工具分析,点击Dump Java Heap,生成当前时间点的 .hprof格式文件;
activity 有多个实例化对象,足以证明它有内存泄漏。看里面的关键对象,是否有泄露,排除.

内存泄露定位

复现场景或者知道哪里有泄露,使用leakcanary

内存泄露常见场景

内部类请使用static,因为非静态内部类默认持有外部类的引用,比如在Activity里面直接放一个自定义的Adapter
静态类(比如Application,单例类,其他static类)请不要持有Activity引用,因为静态类生命周期比Activity长。
解决办法:在需要的地方用BaseApplication.getTopActivity。或者Activity作为弱引用传入
注意Handler会默认持有当前Activity,用的时候最好不要直接new Handler().post(new Runnable...),除非你确定这个runnable会在Activity销毁前执行完

上一篇下一篇

猜你喜欢

热点阅读