我有一个class
扩展到Thread
如下-
public class ThreadTest extends Thread {
private Handler handler;
private Runnable runnable;
public ThreadTest(Runnable runnable, Handler handler) {
this.handler = handler;
this.runnable = runnable;
}
@Override
public void run() {
super.run();
Message msg = handler.obtainMessage();
msg.obj = "YUSSSSSS!";
handler.sendMessage(msg);
if (Looper.myLooper() != null) {
Looper.myLooper().quit();
Log.i("Looper", "has been quit");
}
}
}
现在,我希望在该线程上附加一个
looper
。根据我对Looper
的理解,默认情况下,只有主线程会附加一个looper
。我尝试像这样调用
Looper.prepare()
和Looper.loop()
形成ThreadTest
类的构造函数-public ThreadTest(Runnable runnable, Handler handler) {
Looper.prepare();
this.handler = handler;
this.runnable = runnable;
Looper.loop();
}
但是,我在
java.lang.RuntimeException: Only one Looper may be created per thread
处出现Looper.prepare();
异常。同时,如果我将
looper
附加在Run()
中,则不会遇到任何问题。我究竟做错了什么?
最佳答案
每个线程都有一个弯针,并且只有一个弯针,在尝试向线程中添加弯针之前,您需要进行检查。
您还需要在构造函数中添加if (Looper.myLooper() != null) {}
。
请记住,如果在线程构造函数中调用looper.myLooper()
,则只能获取主线程循环器。因为那时新线程尚未构建。
关于java - 在线程的构造函数中调用Looper.prepare()会导致RunTimeException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46432044/