今天在做新项目的时候,webview写的js interface有一个跳转到主页的第一个界面,(MainActivity里有五个fragment,通过底部自定义的导航栏,然后用hide show来实现切换)。
跳转的时候突然闪退,查了相关信息
由FragmentTabHost导致的Can not perform this action after onSaveInstanceState异常
以及
用反射改变mState来避免
但是这些都有缺陷。
解决方案一:关闭当前界面,然后 给mainactivity弄一个单例,去调用方法,
@JavascriptInterface
public void goIndex() {
finish();
WebActivity.this.runOnUiThread(() -> {
MainActivity.getInstance().tab(0);
});
}
然而这种方法在低性能设备上不凑效,低性能设备关闭界面再回复主页的activity很慢,还是会有这个问题。
也尝试了设置延时,但是根据设备的性能 这个延时的值不好决定。
最终打算,js只传一个信号 告诉mainActivity 我需要切换到主页,然后在activity恢复到前台有焦点的时候再去切换
public boolean needChange = false;
private int changePosition;
public void change(int position) {
needChange = true;
changePosition = position;
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus && needChange) {
tab(changePosition);
needChange = false;
}
}
js Interface里改为
@JavascriptInterface
public void goIndex() {
finish();
MainActivity.getInstance().change(0);
}
暂时解决 后期再测试 有问题删帖- -