Использование таймера Основная тема в Koltin - PullRequest
1 голос
/ 08 апреля 2019

У меня есть операция, которую нужно отложить на несколько секунд.Я использую планировщик и таймер следующим образом:

import java.util.Timer
import kotlin.concurrent.timerTask

 val timer = Timer()
        sliderLastAdjusted = System.currentTimeMillis()

        timer.schedule(timerTask {
            val newTime = System.currentTimeMillis()
            val elapsedTime = newTime - sliderLastAdjusted

            if (elapsedTime > 2000) {

                masterViewModel.updateLeagueProjections()
            }
        }, 2000)

Хотя это работает для выполнения команды с отложенным временем и предотвращает выполнение других команд в течение того же периода времени, она использует основной поток - которыйвызывает проблему при обновлении наблюдаемых.

Как я могу заставить это использовать MainThread?

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Вы можете расширить timerTask для возврата в основной поток.По сути, получите Hander, который работает в главном потоке:

Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
     public void run() {
          // UI code goes here
     }
});

. Затем timerTask выполнит свой параметр функции в приведенном выше методе run.Кроме того, вы можете просто использовать этот код в своей лямбде или даже использовать activity.runOnUiThread().На самом деле правильное решение сводится к тому, как часто вы делаете это в своем коде, только один раз используйте runOnUiThread.

1 голос
/ 08 апреля 2019

Вы можете использовать Обработчик, который при объявлении из Главного потока (например, в Деятельности) будет присоединен к нему,

Вы можете попробовать это:

val delayedHandler = Handler()
delayedHandler.postDelayed({
//// Your Code
}, 2000)

Или выВы также можете оставить свой таймер, просто объявить обработчик вне таймера и использовать метод Handler post () из своего таймера

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...