Как отправить сообщение из одной темы на MainThread в Kotlin? - PullRequest
0 голосов
/ 18 января 2019

Я хочу знать, как мы можем отправить сообщение из одной темы в основную тему в kotlin. ps: не на андроиде. Я не хочу никакого конкретного ответа платформы Android.

Я пробовал это на платформе Android, как показано ниже

    private val uiThreadHandler = object : Handler(Looper.getMainLooper()) {
        override fun handleMessage(msg: Message) {
            (msg.obj as () -> Unit)()
        }
    }

И используя это как

uiThreadHandler.obtainMessage(0, block).sendToTarget()

Я хочу добиться этого на простом котлине. Как добиться этого потока общения в kotlin?

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Обработка сообщений строго связана с Android . Но на самом деле вы не хотите отправлять сообщение обработчику. На самом деле вы запускаете код только в этом потоке. Поэтому вместо того, чтобы использовать сообщения, которые вы делаете, вам нужно просто позвонить post(Runnable):

val uiThreadHandler = Handler(Looper.getMainLooper())

uiThreadHandler.post {
    ...
}

Чтобы абстрагироваться еще дальше, вы можете использовать Kotlin Coroutines с расширением Android для Dispatchers.Main:

GlobalScrope.launch(Dispatchers.Main) {
    ...
}

Блок будет запланирован в главном потоке Android . Если вы ничего не приостанавливаете в самом блоке, что может быть связано с тем, что вы сейчас не используете Сопрограммы , вам, возможно, не придется беспокоиться об отмене Job возвращается с launch.

0 голосов
/ 18 января 2019

Простой способ в Kotlin - использовать сопрограммы и приостанавливать функции

class YourClass : CoroutineScope {

    // context for main thread
    override val coroutineContext: CoroutineContext
        get() = Dispatchers.Main + Job()

    fun toDoSmth() {
        launch {
            withContext(Dispatchers.IO) {
              // task(1) do smth in another thread
            }
              // do smth in main thread after task(1) is finished
        }
    }
}

Читайте также о Диспетчерах

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