我有一个正在使用的业余应用程序。它在主布局中使用了Webview。单击Web视图内的链接可将用户保留在Web视图中。启动它并仍然在应用程序中时,一切都很好。但是,在手机休眠一段时间后,我重新打开了应用程序以从上次停止的地方冲浪,我发现了一些意外行为。
该网页将加载文本,但不加载图像(问号或仅图像应为空白)。
单击webview内网页内的链接会将用户带出webview,并尝试打开外部浏览器。
作为参考,我已经做了:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
webview.saveState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
webview.restoreState(savedInstanceState);
}
以及onCreate代码中的内容:
if (savedInstanceState != null) {
webview.restoreState(savedInstanceState);
}else{
// this means my app is starting from scratch and do the necessary webview loading
}
我不确定我缺少什么,但是经过长时间的睡眠之后,由于缺少更好的术语,webview似乎错了,“坏了”。我尝试搜索有关此问题的更多信息,但没有看到更多人遇到此问题。有人不希望以这种方式使用Webview,或者我做错了什么。我认为是后者。
感谢您的任何反馈。
更多信息:
Webview是应用程序的根目录活动。复制问题的步骤是,仅在Webview中按下主菜单,这样该应用才会暂停Webview活动,等待或让手机进入睡眠状态,打开手机,打开应用,然后该活动会在加载Webview的最后一页上重新开始。等待足够长的时间,Webview活动将表现出上述行为。
我还设置了基本的生命周期函数onResume,onPause,onStop,onDestroy,分别调用它们各自的超级函数等。
我也使用WebViewClient和WebChromeClient。
我的WebViewClient仅处理“ onPageStarted”,“ onReceivedError”,“ shouldOverloadUrlLoading”和“ onPageFinished”。
另一方面,我的WebChromeClient仅执行“ onGeolocationPermissionShowProProt”和“ onProgressChanged”。
两者都可以在Web视图顶部创建一个加载栏,以显示页面加载进度。
最佳答案
因此,我已经做了很多测试,但最有用的是每个生命周期中的Toast消息onResume,onPause,onStop,onDestroy以及onSaveInstanceState和onRestoreInstanceState。
我正在使用这样的代码块(以恢复状态)[重写上面的代码]:
if(savedInstanceState!=null){
webview.restoreState(savedInstanceState);
}else{
// do the webview getsettings such as setUseWideViewPort and setSupportZoom
// setInitialScale, setJavaScriptEnabled, etc..
// as well as setting WebViewClient and WebChromeClient
// then preloading the webview with the default url
}
由于内部有Toast消息用于调试,因此我注意到长时间睡眠后,Android显然会终止我的活动,并且再次调用onCreate。我没有考虑的事情是webview.restoreState无法还原有关Webview的所有内容。
它不会恢复上面“ else”块中的任何内容。实际上,在此期间设置的任何内容都将消失。因此,仅保存了网站,没有WebView和WebChrome客户端。
这导致了上述行为。
通过将setup块从“ else”块之外移出,我的webview能够使用必要的设置再次进行设置。
添加的信息:我也删除了onRestoreInstanceState()受保护的函数,因为它在我所关心的地方似乎没有做任何事情。
如果我忽略了解决方案中的任何内容,仍然欢迎提出评论和建议。谢谢。
关于android - 长时间 sleep 后Android Webview无响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38067401/