切换活动时保存WebView的状态

时间:2015-10-25 06:22:02

标签: android webview bundle

我正在创建一个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状态?

2 个答案:

答案 0 :(得分:1)

WebView无法正常恢复其状态。这不是错误。它是促进用户浏览活动隐私的预期变更。来自WebView documentation

  

要销毁和重新创建活动的标准行为   当设备方向或任何其他配置更改时。这个   将导致WebView重新加载当前页面。如果你不想要   那个,你可以设置你的活动来处理方向和   keyboardHidden更改,然后只留下WebView。它' 11   根据需要自动重新定位。

维护状态的唯一方法是自己处理配置更改。或者,您可以完全避免使用标准WebView,并选择Crosswalk之类的自定义WebView。

答案 1 :(得分:0)

启用以下属性,除上述代码外,还有魅力:)

android:launchMode="singleInstance"
android:alwaysRetainTaskState="true"
对于包含AndroidManifest.xml中的WebView的每个活动,

为我工作:)