我遇到的问题是,杀死线程的join
方法没有执行方法的其余部分,该方法也是在线程中启动的。这是一个代码示例:
private static Thread thread;
public static void addMessage(final String s) {
thread = new Thread() {
@Override
public void run() {
String data = Message.send(s);
addMessageToContainer(data);
}
};
thread.start();
}
public static void addMessageToContainer(String data) {
//Do some stuff with the data
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
//This code here will not be executed.
}
通常情况下,我可以在调用join
函数之前执行代码。但是我必须在这个线程执行后加载带有一些内容的webview。因此,当我删除join
时,它会给我以下错误消息:
java.lang.RuntimeException: java.lang.Throwable: A WebView method was called on thread 'Thread-9072'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 1) {5ac9b39} called on null, FYI main Looper is Looper (main, tid 1) {5ac9b39})
那么在线程执行后我该怎么做才能加载内容?
答案 0 :(得分:3)
加入并没有杀死一个线程。加入等待直到该线程自杀。因此,代码将在未来的某个时间执行,当该线程决定完成时。从该线程调用一个线程的等待将导致它死锁,从不做任何事情,但永远不会死。所以在上面你从线程本身调用它的情况下,它将永远挂起。
没有办法直接杀死一个线程,因为它不可能安全地这样做。从外部杀死一个线程的方法是中断它,并让线程检查它是否经常被中断(),如果是这样就自杀了。从内部杀死线程的方法是从runnable的run方法返回。
您的网络视图错误完全不相关。您只能触摸主线程上的视图。不要在线程上使用webview做任何事情。