【发布时间】:2017-09-26 16:57:53
【问题描述】:
我有一个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();
}
但是,我在Looper.prepare(); 得到了java.lang.RuntimeException: Only one Looper may be created per thread 异常。
虽然,如果我在Run() 中附加looper,我不会遇到任何问题。
我做错了什么?
【问题讨论】:
-
@pskink 在哪里?当我在构造函数上调用
Looper.prepare()时,我不会在run()下调用它。 -
@pskink 我只是在玩 Android 中的多任务处理。我从不调用 prepare() 两次。因此,这个问题。
-
这是因为您在主 UI 线程(在
ThreadTest构造函数内)调用Looper#prepare,它已经附加了Looper -
@pskink 有道理。
标签: java android multithreading android-thread