EditText导致的内存泄漏问题

由于Edittext持有对Activity的context的引用,导致Activity无法正常回收。

解决办法:重写EditText,将对Activity中Context的引用,改为对ApplicationContext的引用。

super(context);
改成:
super(context.getApplicationContext());

备注:存在隐患,会导致点击输入框,无法弹起键盘的问题;慎用!慎用!慎用!

完整示例:

public class TopicEditText extends androidx.appcompat.widget.AppCompatEditText {

    public TopicEditText(Context context) {
        super(context.getApplicationContext());// 关键点
        initView();
    }

    public TopicEditText(Context context, AttributeSet attrs) {
        super(context.getApplicationContext(), attrs);
        initView();
    }

    public TopicEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context.getApplicationContext(), attrs, defStyleAttr);
        initView();
    }
    
    private void initView() {
        addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void afterTextChanged(Editable editable) {}
        });
    }
}

你可能感兴趣的:(代码块,内存泄漏,Android内存优化,Memory,leak)