是否可以杀死android中的线程我看到有一个
Thread.currentThread().destroy();
然而,已被弃用,但仍不适用于我。我现在在中国没有工作VPN,所以无法读取Android开发,但我知道它说,在webview中插入的javascript将在一个单独的线程中运行。
问题是即使webview和片段被破坏,这个线程也不会被杀死。所以它继续脚本,即使我希望它被中止/停止/销毁(无论如何)。
答案 0 :(得分:0)
如果要停止javascript,请致电mWebView.destroy();
。在Activity被破坏后,我可以停止播放音乐。我在我的活动的onDestroy()
中调用该方法。
以下是该方法的文件:
public void destroy()
在API级别1中添加了破坏此WebView的内部状态。这个 此WebView已从中删除后应调用该方法 查看系统。之后,此WebView上不会调用其他任何方法 破坏。
<强>更新强>
我找到了另一个有效的解决方案。它的主要想法是,如果你想停止前一个网址中的javascript,请加载另一个网址。因此,您可以在资产中放置一个空白的html文件,并在您想要停止耗时的javascript时加载它。像这样的代码:
appWebView.loadUrl("file:///android_asset/infAppPaused.html");
请参阅帖子here。
更新1: 这篇文章中最终解决问题的解决方案。
在JavaScriptInterface类中添加一个check state方法,并在处理循环期间调用该方法,如果state不匹配则退出循环。然后,如果在片段被破坏时将状态更改为“退出状态”,则javascript将停止。
以下是代码示例:
private boolean webviewAlive = true;
public class JavaScriptInterface {
@JavascriptInterface
public boolean checkState() {
return webviewAlive;
}
}
// Init WebView
mWebView.addJavascriptInterface(new JavaScriptInterface(),
"HtmlViewer");
// To stop the javascript loop
webviewAlive = false;
// Call check state method in javascript loop
if(!window.HtmlViewer.checkState()){
// break the javascript
}
答案 1 :(得分:0)
尝试Thread.currentThread().interrupt();
,然后将您的主题设置为空。
修改强>
根据javadocs,currentThread()抓住了“当前正在执行的线程对象”,我假设它正在运行时抓取你的线程。如果您想更具体地了解您正在使用的线程,可以执行
//get a reference
Thread t = new Thread(new Runnable() {
@Override
public void run() {
}
});
//kill the thread
t.interrupt();
t = null;
编辑哦,呃,我没有注意到整个“javascript into webview”的事情。我的错。你可以发布一些当前的实现吗?