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