Главная Ui Freezes

Я пытаюсь пометить камеру с разной скоростью.

поэтому для этого я использую seekbar для изменения скорости мигания.

Когда я сначала меняю значение поиска, он начинает мигать

private fun startFlashLightBlink(context: Context,blinkSpeed: Int) { isBlinkFlashLight=true flashLightBlinkThread = Thread{ Looper.prepare() while (isBlinkFlashLight){ val blinkInterval:Long=blinkSpeed*100L //getMainLooper() handler is associated "with the Looper for the current thread" ... which is currently the main(UI) thread val handler = Handler() var runnable:Runnable = Runnable{ toggleFlashLight() } handler.postDelayed(runnable,blinkInterval) } Looper.loop() } flashLightBlinkThread?.start() } 

Но он замораживает основной пользовательский интерфейс, поэтому теперь я не могу изменить значение с помощью seekbar И получает ANR-сообщение. Что мне делать? Я не могу использовать asynkTask. Обслуживание также не является хорошим вариантом. Я думаю.

Не пытайтесь использовать отдельный Thread и Looper. Обработчика достаточно для того, что вы хотите сделать. Циклируйте это так:

 private static final long POST_DELAY = 100; private final Handler handler = new Handler(); private final Runnable cycleRunnable = new Runnable() { public void run() { if (isCycling) { // make your cycle body here handler.postDelayed(cycleRunnable, POST_DELAY); } } }; private boolean isCycling = false; public void startCycle() { if (!isCycling) { isCycling = true; handler.postDelayed(cycleRunnable, POST_DELAY); } } public void stopCycle() { if (isCycling) { isCycling = false; handler.removeCallbacks(cycleRunnable); } }