Blankj / AndroidUtilCode

:fire: Android developers should collect the following utils(updating).
https://blankj.com/2016/07/31/android-utils-code/
Apache License 2.0
33.32k stars 10.69k forks source link

ToastUtils 被检测到内存泄露 #254

Closed JingleDingDang closed 7 years ago

JingleDingDang commented 7 years ago

ToastUtils的静态成员变量sToast内存泄漏。是调用自定义Toast那个方法后触发的。 检测持有Toast.mNextView,引用到了自定义Toast View的上下文,导致调用该工具的Activity没法释放。感觉还是静态成员变量的锅。

zhuhj8 commented 7 years ago

本工具的ToastUtils没有使用Activity实例,使用的applicationcontext

Blankj commented 7 years ago

我Toast引用的自定义View是弱引用啦,不会泄漏的,你找个我代码泄漏的地方我看看

Blankj commented 7 years ago

@heroPool 你咋这么快

zhuhj8 commented 7 years ago

是,使用的weaklyActivity,

Blankj commented 7 years ago

@JingleDingDang 已修复内存泄露bug,引起的原因是由于你给sToast设置了自定义View,在Activity退出的时候View还在sToast中引用着没有销毁,所以导致了Activity泄露。

Blankj commented 7 years ago

@JingleDingDang 你传入的view肯定和activiy生命周期相绑定,如下

LayoutInflater.from(xxActivity).inflate(layout, null);

这样的话会造成泄露。 但如果你把xxActivity改成application就没事了