我正在使用的 webview 有一个小问题。我正在尝试使用 webview 来允许用户填写注册表单。当用户在一个会话中完成表单时,这可以正常工作,但如果用户锁定他们的手机,webview 活动就会被破坏。
我在内存中有两项活动,其中一项是内存密集型活动。我相信我遇到的问题是,因为这个其他活动需要比 webview 更多的内存,所以 webview 被破坏了。
在某种程度上我对此很好,但我真的希望能够保存网页的当前状态,这样用户就不必再次提交所有详细信息。无论如何我可以做到这一点。
谢谢
试试看:- 如果前一个 Activity 将被销毁,您可以使用 WebView 方法 saveState()/restoreState() 并将其保存到活动 onRestore 包并在 onCreate 方法中使用保存的值。您可以使用此处描述的类似方法(但仅用于配置更改): http: //www.devahead.com/blog/2012/01/preserving-the-state-of-an-android-webview-on-屏幕方向改变/
我们遇到了类似的问题。我们有一个带有 webview 的活动。
我们希望用户在 web 视图中的表单上输入 3 个字段,然后启动一个新的活动(相机)来拍照。当我们取回图片时,我们使用 javascript 将图片插入到当前活动的 webview 表单中。这一切在 99.9% 的时间里都很好用。然而,在一些难以重现的奇怪场景中,当相机活动处于活动状态时,其背后的 webview 活动会被破坏。saveState / restoreState 仅部分恢复 webview。启动相机时用户输入但未提交的 3 个表单字段现在丢失了。它们不会被 webview.saveState 保存。此外,页面上的一些 javascript 状态也会丢失。
为了解决这个问题,我们向页面添加了一个 javascript 方法,并在 saveInstanceState 上从应用程序调用它。然后在我们恢复状态后,我们在 webview 页面上调用另一个 javascript 方法来恢复状态。这是一种痛苦,但需要为您需要这样做的每种形式进行工作,但它确实有效。
我希望未来版本的 Android webview.saveState 将其完全保存为活动被破坏之前的状态。或者,如果您将 Activity 标记为对您的应用至关重要,并且仅在您的应用不是用户正在使用的当前应用时才允许销毁该 Activity,那就太好了。
试试WebView.addJavascriptInterface,在Activity.onPause时,通过loadUrl("javascript:...")在页面中调用javascript方法,在网页中调用WebView.addJavascriptInterface提供的native方法来保存数据。这是你想要的吗?
按下返回键时可以销毁活动;当屏幕旋转时(更快地破坏活动并重新创建所有图形元素);或者什么时候它可能不会在一段时间内激活(锁定手机,按主页键或启动其他应用程序)。
你需要这样做@Ixx 在他的评论中建议:Android webView saveState
使用类似的东西保存应用程序的数据
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
/// save your things, e.g.
outState.putString("name", name);
}
并恢复,它存在于方法中onCreate
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// if it is a new activity
if (savedInstanceState == null) {
// initialize vars, e.g.
name = "Unknown";
}
// if is a call after detroy the activity
else {
// recover vars, e.g.
name = savedInstanceState.getString("name");
}
}