目录
环境
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.touchExplorationStateChangeListener = new TouchExplorationStateChangeListener() {
public void onTouchExplorationStateChanged(boolean enabled) {
SnackbarBaseLayout.this.setClickableOrFocusableBasedOnAccessibility(enable