我有一个带有webview的活动。看起来webview不会随着活动而被破坏。为了演示,我创建了一个html页面,它运行一个计时器,每隔几秒钟加载一次图像资源。在销毁活动后脚本继续执行:
public class MyWebViewActivity extends Activity {
private WebView mWebView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.the_layout);
mWebView = (WebView)findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setBuiltInZoomControls(true);
mWebView.setWebViewClient(new EmbeddedWebViewClient());
mWebView.loadUrl("test url");
}
private class EmbeddedWebViewClient extends WebViewClient {
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
if (Config.DEBUG) { Log.v(TAG, "onLoadResource(): " + url); }
}
}
}
因此,只要调用onLoadResource(),上面只会打印一条日志语句。这是测试html页面中的javascript:
<html>
<head>
<script type="text/javascript">
function load() {
setInterval("doit()", 3000);
}
function doit() {
Image1 = new Image(150, 20);
Image1.src = "abc_" + Math.floor(Math.random()*100) + ".png";
}
</script>
</head>
<body onload="load()">
</body>
</html>
以上只是在定时器间隔创建一个图像资源,以触发EmbeddedWebViewClient()中的onLoadResource()方法。
所以是的,我可以在LogCat中看到消息在离开活动后继续打印。我们必须以某种方式关闭WebView吗?也许这就是这里描述的问题:
http://code.google.com/p/android/issues/detail?id=9375
如果已知问题应该在api文档中记录吗?
注意:在Android 2.3.4,Nexus S上运行它。
由于
答案 0 :(得分:1)
如果活动无法恢复,您也可以调用mWebView.stopLoading()。
答案 1 :(得分:1)
此解决方案对我有用:
在MyActivity.java文件中,我添加了:
@Override
protected void onDestroy() {
webview.destroy();
webview = null;
super.onDestroy();
}
答案 2 :(得分:0)
我不熟悉WebView,但您确定您的活动真的被破坏了吗? 尝试拨打
this.finish()
当你想让它退出时。 如果仍然无效,那么您希望控制活动即将死亡时会发生什么:
@Override
protected void onDestroy()
{
// make a call to your script, tell it to end
}
当然,如果您希望脚本停止而不会完全破坏您的活动,您可以覆盖onPause()或onStop()
希望这有帮助
答案 3 :(得分:0)
您可能正在寻找pauseTimers()和resumeTimers()调用。如果你将它添加到你的活动中,我认为它会开始做你期望的事情:
public void onResume() {
super.onResume();
if (mWebView != null) {
mWebView.resumeTimers();
}
}
public void onPause() {
super.onPause();
if (mWebView != null) {
mWebView.pauseTimers();
}
}
当您从应用程序交换时,logcat消息会停止,并在您返回时开始备份。
答案 4 :(得分:0)
似乎没有。
android develop doc here说
当设备方向或任何其他配置更改时,将销毁并重新创建活动的标准行为。这将导致WebView重新加载当前页面。
因此,我认为在您离开活动时无需销毁webview。只是听一些事件。