背景
最近QA给我报了一个bug,说是在编辑框快速输入邮箱的时候有时会导致页面无响应。
这个编辑框是专门输入邮箱的,所以监听了TextWatcher,每次字符的改变都会用正则判断是否是正确的邮箱,如果不是的话会显示错误提示。这里我没有考虑到用户快速的填写内容,会触发多次的afterTextChanged
回调这个case,这样就会因为正则匹配次数太多造成ANR。下面我谈谈自己是怎样修复这个bug的:
一、减少afterTextChanged
回调
在afterTextChanged
方法里面通过handler延迟发送消息,在延迟时间之内的消息全部删除,代码如下:
@Override
public void afterTextChanged(Editable editable) {
if (TextUtils.isEmpty(editable.toString())) {
return;
}
final Message msg = handler.obtainMe