java.lang.RuntimeException: только один Looper может быть создан для потока
У меня есть простая тема, которая выглядит так:
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();
Это внутренний класс основной деятельности. Однако этот поток выполняется не в основном действии, а внутри другого потока, который выполняется в основном действии.
В любом случае, этот пример точно такой же, как здесь, но по какой-то причине он дает мне java.lang.RuntimeException: только один Looper может быть создан для потока.
Я не создавал никаких других петлителей, по крайней мере, где-либо явно.
2 ответа
java.lang.RuntimeException: только один Looper может быть создан для потока
Исключение выдается, потому что вы (или основной код Android) уже вызвали Looper.prepare()
для текущего исполняющего потока.
Следующее проверяет, существует ли уже Looper для текущего потока, если нет, он создает его, тем самым избегая RuntimeException
,
public void run()
{
if (Looper.myLooper() == null)
{
Looper.prepare();
}
thisHandler = new Handler();
....
}
Вместо того, чтобы просто звонить Looper.prepare();
, сначала проверьте, если Looper
не существует для вашего Thread
если нет, вызовите эту функцию. Как это:
if (Looper.myLooper()==null)
Looper.prepare();