CountDownTimer: «Невозможно создать обработчик внутри нити, который не назвал Looper.Prepare ()»
-
25-09-2019 - |
Вопрос
Я знаю, что общая проблема «не может создать обработчик внутри нити, которая не назвала Looper.Prepare ()», но я изо всех сил пытаюсь понять, как это относится в этом случае.
Я пытаюсь построить новый CoundDownTimer в ните не-пользовательского интерфейса, которую я думаю, является причиной этой ошибки, но я не понимаю, почему таймер должен будет использоваться в основном потоке. Из того, что я вижу, похоже, он имеет обработчик обратного вызова, который должен работать в потоке, который имеет петлитель, который не имеет по умолчанию нить неэй. Кажется, мои варианты: 1) Сделать эту нить не-пользовательского интерфейса иметь петлер или 2) сделать какой-то странный метод в моем пользовательском потоке, которая может построить этот таймер, оба, которые кажутся ко мне. Может кто-нибудь помочь мне понять последствия?
Кроме того, кто-нибудь знает о любых полезных ссылках, которые проливают свет на петлер и MessageQueue? Я не понимаю их хорошо, так как я уверен, что я показал. Спасибо!
Решение
Таймер не должен быть в потоке пользовательского интерфейса. Но я думаю, вы обновляете UI для отображения подсчета подсчет в этом потоке. Ю, не могу этого сделать.
Используйте Asynctask и обновите UI в onProgressUpdate
Другие советы
Экземпляр CountDownTimer должен быть создан на потоке UI.
Если у вас был объект пользовательского класса:
public class MyTimer extends CountDownTimer{
public MyTimer(...){
super(duration,interval);
}
//... other code ...//
}
Строительство объекта должно быть запущено в потоке UI
MyTimer mTimer = new MyTimer(...); //can throw RuntimeException
// with Looper.prepare() issue if
// caller isn't UI thread
Если несколько потоков создают и уничтожают таймер, убедитесь, что он создан на ните UI, делая что-то подобное:
MyActivity.runOnUiThread( new Runnable(){
public void run(){
mTimer = new MyTimer(...);
}
});
Но обратите внимание, как вышеуказанный сегмент кода требуется ссылка на вашу деятельность, а также к вариабельный MTIMER класса