目录
环境
support包版本28
项目中有使用到Snackbar,但是使用过程中有一些问题。
发现问题
因为程序中有崩溃日志记录,经常发现有个拍照上传的页面会出现oom问题,但是检查几次,发现并没有明显的问题。
后来通过LeakCanry发现一处内存泄漏问题,没想到是SnackBar内部出现了内存泄漏
分析问题
通过 Snackbar.make方法创建Snackbar时,会创建一个根布局SnackbarBaseLayout
protected SnackbarBaseLayout(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, styleable.SnackbarLayout);
if (a.hasValue(styleable.SnackbarLayout_elevation)) {
ViewCompat.setElevation(this, (float)a.getDimensionPixelSize(styleable.SnackbarLayout_elevation, 0));
}
a.recycle();
this.accessibilityManager = (AccessibilityManager)context.getSystemService("accessibility");
this.touchE
Android内存泄漏:Snackbar导致的OOM问题

博客探讨了一个在Android应用中由于错误使用Snackbar导致的内存溢出问题。作者通过LeakCanary发现了问题根源:未显示的Snackbar在 AccessibilityManager 中注册了一个监听器,导致内存泄漏。解决方案是按需初始化Snackbar,遵循按需加载原则,同时推荐在开发时使用LeakCanary来检测内存泄漏。
最低0.47元/天 解锁文章
1081

被折叠的 条评论
为什么被折叠?



