我正在创建一个Web浏览器,其中包含一些WebView活动。假设我在活动A中,当我切换到活动B并在那里浏览并回到活动A时,将打开默认URL。我需要一个具体的解决方案来保存我在Bundle中的状态。
@Override
protected void onResume() {
super.onResume();
Toast.makeText(getBaseContext(), "OnResume activity called",Toast.LENGTH_LONG).show();
if(webView_bundle!=null)
{
wv.restoreState(webView_bundle);
}
}
@Override
protected void onPause() {
super.onStart();
Toast.makeText(getBaseContext(), "OnPause activity called",Toast.LENGTH_LONG).show();
wv.saveState(webView_bundle);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
webView_bundle=(Bundle) outState.clone();
wv.saveState(webView_bundle);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
webView_bundle=(Bundle) savedInstanceState.clone();
wv.restoreState(webView_bundle);
}
顺便说一下,我没有使用Fragments并使用API 19,即使我切换到另一个活动并回到此活动,我该怎么做才能保存活动的WebView状态?
答案 0 :(得分:1)
WebView无法正常恢复其状态。这不是错误。它是促进用户浏览活动隐私的预期变更。来自WebView documentation:
要销毁和重新创建活动的标准行为 当设备方向或任何其他配置更改时。这个 将导致WebView重新加载当前页面。如果你不想要 那个,你可以设置你的活动来处理方向和 keyboardHidden更改,然后只留下WebView。它' 11 根据需要自动重新定位。
维护状态的唯一方法是自己处理配置更改。或者,您可以完全避免使用标准WebView,并选择Crosswalk之类的自定义WebView。
答案 1 :(得分:0)
启用以下属性,除上述代码外,还有魅力:)
android:launchMode="singleInstance"
android:alwaysRetainTaskState="true"
对于包含AndroidManifest.xml中的WebView的每个活动,为我工作:)