【问题标题】:Save State of WebView when switching Activity切换Activity时保存WebView的状态
【发布时间】:2015-11-01 14:31:31
【问题描述】:

我正在制作一个 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 的状态?

【问题讨论】:

  • 下面的答案有帮助吗,文卡特什?

标签: android webview bundle


【解决方案1】:

WebView 无法正确恢复其状态。这不是错误。这是一项旨在促进用户浏览活动隐私的更改。来自WebView documentation

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

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

【讨论】:

    【解决方案2】:

    除了上面的代码之外,启用以下属性就像一个魅力:)

    android:launchMode="singleInstance"
    android:alwaysRetainTaskState="true"
    

    AndroidManifest.xml 中包含 WebView 的每个活动都为我工作 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 2013-12-31
      • 2014-05-22
      相关资源
      最近更新 更多