【问题标题】:How to save WebView state and restore it in Android Lollipop?如何在 Android Lollipop 中保存 WebView 状态并恢复它?
【发布时间】:2015-03-21 17:13:01
【问题描述】:

这个问题被问了很多次,并且它的答案曾经有效。最近在文档中说,出于安全原因,他们已删除此功能。 webView 状态只能恢复一些有限的东西。我尝试了多种方法来做到这一点,但每次它刷新 webView 状态并且它不显示 webView 内容。

我想做什么?

我有一个网络应用程序,我想在超时后检索用户内容(如果他们输入的凭据正确)。



到目前为止我做了什么?

1- 我已经尝试了所有解决方案,包括以下方法:

@Override
protected void onSaveInstanceState(Bundle outState) {
    webView.saveState(outState);
}
@Override
public void onCreate(final Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.blah);
   WebView webview = (WebView)findViewById(R.id.webview);
   if (savedInstanceState != null)
      webview.restoreState(savedInstanceState);
   else
      webview.loadUrl(URLData)
}

还有清单文件

android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|uiMode|screenSize|smallestScreenSize"

2- 我试图将我的超时活动显示为一个对话框,如果我在不评估凭据的情况下将其关闭,但如果我评估并关闭对话框,它会重新创建 webView。

任何帮助将不胜感激。

【问题讨论】:

    标签: android webview android-webview


    【解决方案1】:

    我终于找到了解决方案。无法保存 WebView 的状态并拥有所有内容,因此我们需要防止重新加载或重新创建 webView。为了让我们的活动实例包含 webView,我们应该将以下代码添加到我们的清单文件中:

    <activity ...
            android:launchMode="singleInstance"
            android:alwaysRetainTaskState="true">
    

    然后,如果您需要通过您的应用程序完全重新创建实例以刷新 webView,您可以使用 finish();如果它在 Activity 内部,或者如果您在另一个 Activity 中并且您想要重新创建您的 webView Activity,请阅读this link 来执行此操作。

    【讨论】:

      【解决方案2】:

      在 Manifest 中为 Activity 设置 android:configChanges="orientation|screenSize" 以保留其中包含 Webview 的 Activity 的状态,如果纵向和横向视图的布局没有差异。

      您可以将 Webview 状态保存为:

      override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) webView.saveState(outState) 
      } 
      
      override fun onRestoreInstanceState(savedInstanceState: Bundle?) { super.onRestoreInstanceState(savedInstanceState) webView.restoreState(savedInstanceState) 
      }
      

      仅当保存状态不为空时才重新加载:

      if (savedInstanceState == null) {
          webView.loadUrl("replace_with_your_url")
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-23
        • 2013-08-31
        • 1970-01-01
        • 2019-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多