设置环聊为默认短信,第一次进入会发生crash
时间:10-02
整理:3721RD
点击:
[DESCRIPTION]
进入信息 -> 设置 -> 短信功能已开启 -> 默认短信应用 -> 环聊
退出信息到主界面,进入环聊
结果:第一次进入环聊,会提示环聊已停止运行,退出后再次进入都正常。
[SOLUTION]
根据trace code发现这是Google Hangouts的一个bug,账户没有初始化的情况下本应该是会抛出异常的。
但是代码逻辑有问题,而导致第二次进入的时候不会run到抛出异常的地方,具体代码如下:
private void q()
{
if (this.am) { //首次进入为false
return;
}
this.am = true; // 位置有问题
abx localabx = t();
if (localabx == null) {
throw new IllegalStateException("account null in maybeInitialize");
}
this.am = true; 这句代码的位置应该是有问题的,如果抛出异常,该句就不应该执行。
abx localabx = t(); 该句调用主要是获取与账户相关的信息:
private abx t()
{
apc localapc = (apc)getActivity();
if ((localapc == null) || (localapc.o_() == null))
{
cir.f("Babel", "Account is no longer valid in AudienceListFragment.");
return null;
}
根据log看到显然返回的是null值。
这个问题已经反馈给Google,Google会修复,其实使用Hangouts App 需要提供一个合理的Google账户是必要的。
进入信息 -> 设置 -> 短信功能已开启 -> 默认短信应用 -> 环聊
退出信息到主界面,进入环聊
结果:第一次进入环聊,会提示环聊已停止运行,退出后再次进入都正常。
[SOLUTION]
根据trace code发现这是Google Hangouts的一个bug,账户没有初始化的情况下本应该是会抛出异常的。
但是代码逻辑有问题,而导致第二次进入的时候不会run到抛出异常的地方,具体代码如下:
private void q()
{
if (this.am) { //首次进入为false
return;
}
this.am = true; // 位置有问题
abx localabx = t();
if (localabx == null) {
throw new IllegalStateException("account null in maybeInitialize");
}
this.am = true; 这句代码的位置应该是有问题的,如果抛出异常,该句就不应该执行。
abx localabx = t(); 该句调用主要是获取与账户相关的信息:
private abx t()
{
apc localapc = (apc)getActivity();
if ((localapc == null) || (localapc.o_() == null))
{
cir.f("Babel", "Account is no longer valid in AudienceListFragment.");
return null;
}
根据log看到显然返回的是null值。
这个问题已经反馈给Google,Google会修复,其实使用Hangouts App 需要提供一个合理的Google账户是必要的。
