我使用onSaveInstanceState()和onRestoreInstanceState()来保存WebView状态,如下所示:
@Override public void onSaveInstanceState(Bundle savedInstanceState) { webView.saveState(savedInstanceState); }
和
@Override public void onRestoreInstanceState(Bundle savedInstanceState) { webView.restoreState(savedInstanceState); }
我在onCreate()中也有这个:
public void onCreate(Bundle savedInstanceState) { ... other code ... if(savedInstanceState != null){ webView.saveState(savedInstanceState); }else{ webView.loadUrl("http://mypage"); } }
问题:似乎恢复WebView根本不会恢复Javascript变量/ environment / workspace.当应用程序在后台被杀死然后恢复时,整个Javascript都随着所有对象/变量而消失. javascript代码是名称间隔的,即window.utilitiesPack,window.eventHandlers,window.automation等,它们是未定义的.还使用了JQuery和其他javascript插件:恢复状态后所有这些插件似乎都未定义.基本上整个Javascript都没有恢复.
有人可以确认或反驳这是真的如此(Javascript没有保存)?如果没有保存整个Javascript工作区,那么WebView.saveState()究竟保存了什么?是否有一些简单/优雅的方法来使用现有的API来保存Javascript对象?
// ================================================ ======
Update1:问题仍然存在.最重要的困难是:
我正在推出一个Camera Intent来获得结果.拍照时,应用程序返回到WebView活动,并且应该使用Javascript来更新HTML5 LocalStorage和一些数据变量.
显示Camera Activity时,WebView的主Activity被杀死,所以当我们回到WebView时,不再有Javascript,也没有我可以从Android代码调用的函数.这在Galaxy S3上每次都会发生.它仍然发生在其他手机上,但不是每次都拍照.
不知道该怎么办.不知何故,我必须使用WebView制作主Activity,以便在使用Camera Intent拍摄照片时保持状态.有谁知道如何实现这一目标?
解决方法
Please note that this method no longer stores the display data for this WebView. The prevIoUs behavior could potentially leak files if restoreState(Bundle) was never called.
这一行:
Returns the same copy of the back/forward list used to save the state.
在WebView.saveState(Bundle)
的javadoc中.