【发布时间】:2014-05-27 03:34:46
【问题描述】:
我有一个简单的线程是这样的:
public class AwesomeRunnable extends Thread {
Handler thisHandler = null;
Handler uihandler = null;
String update = null;
long time = 0;
public AwesomeRunnable(Handler h, long howLong) {
uihandler = h;
time = howLong;
}
public void run() {
Looper.prepare();
thisHandler = new Handler();
...
编辑:添加启动可运行的代码
public class StartCycle implements Runnable {
@Override
public void run() {
pomodoroLeft = numPomodoro;
while(pomodoroLeft > 0) {
pomodoroLeft--;
actualSeconds = 6 * ONE_SECOND;
runnable = new AwesomeRunnable(myHandler, actualSeconds);
runnable.start();
waitForClock();
它是主要活动的内部类。 这个线程,但是不在主活动上运行,而是在另一个在主活动上运行的线程内.
不管怎样,这个例子完全和here一样,但是由于某种原因它给了我java.lang.RuntimeException:每个线程只能创建一个Looper。
我没有创建任何其他 Looper,至少在任何地方都明确表示。
【问题讨论】:
-
你能显示以
AwesomeRunnable开头的代码吗? -
看起来不错。哪一行抛出异常?哪个线程? (如果您在终端窗口中查看 logcat 输出,请使用
adb logcat -v threadtime在每行显示线程 ID。)必须在单个线程中创建循环器两次,因此您需要确定它是否正在运行在错误的线程中,或者在新线程中运行了两次。 -
@fadden
Looper.prepare();正在引发异常。好的...将按照您的建议尝试通过日志输出。 -
@fadden 实际上错误信息的第一行是:FATAL EXCEPTION: main.这是否意味着它以某种方式在主线程上创建了另一个弯针?但为什么呢?
-
听起来像是在尝试。如果两个数字(pid 和 tid)相同,那么它肯定是在尝试在主线程中创建一个新的 Looper。检查堆栈跟踪并查看调用该函数的内容。
标签: java android multithreading