Android点击登录应用黑屏无响应 提示X-Firebase-Locale值为null错误
问题排查与修复方案
System: Ignoring header X-Firebase-Locale because its value was null. 属于Firebase SDK输出的普通警告,和你遇到的点击登录后黑屏ANR问题没有直接关联,不用优先排查该警告。
你代码中存在以下可导致ANR的问题,按优先级修复即可:
账号密码读取时机错误
你当前写的Email = etEmail.getText().toString()、Password = etPassword.getText().toString()如果是在Activity初始化阶段执行,读取到的永远是输入框默认的空值,传入空参数调用signInWithEmailAndPassword会触发Firebase内部异常校验,引发后续逻辑异常。
修复方法:将这两行代码移动到登录按钮的点击回调方法内部,点击登录时再实时读取输入框内的用户输入内容。SharedPreferences操作阻塞主线程
你连续调用了两次editor.commit(),commit()属于同步IO操作,会直接阻塞当前主线程,当SP文件体积较大时就会导致主线程卡死,触发黑屏ANR。同时你在clear()后立即执行的第一次commit()属于完全无用的冗余操作。
修复方法:删掉冗余的commit,推荐用异步提交的apply()替代commit(),完全不会阻塞主线程,优化后的代码如下:
sharedPreferences = getSharedPreferences("file", 0); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.clear(); editor.putString("email", Email); editor.putString("password", Password); editor.putString("google", "no"); editor.apply();
- 补充日志排查其他问题
如果修复上述问题后仍然存在异常,可在登录失败的else分支添加异常日志打印,明确登录环节是否有其他报错:
Log.e("LoginFail", "登录失败", task.getException());
另外需要自行排查跳转目标CalendarActivity的生命周期方法中是否存在耗时同步操作(如大量IO、复杂计算、主线程网络请求等),这类操作是ANR最常见的诱因。
内容的提问来源于stack exchange,提问作者Jalim

