Правильный способ заправки в котлин - PullRequest
0 голосов
/ 06 апреля 2019

У меня есть блок кода потока, который в основном отображает индикатор выполнения в течение 2 секунд, а затем показывает представление переработчика.Интересно, есть ли более правильный способ написать это, например, сопрограммы или rxjava.Я пробовал сопрограммы, но у меня были сбои.Код:

 runOnUiThread {
            fabClose()
            isOpen = false
            rec_view.adapter=null
            progressBar.visibility = View.VISIBLE

        }
        val handler = Handler()
        val t = Timer()
        t.schedule(object: TimerTask() {
            override fun run() {
                handler.post {
                        runOnUiThread {
                            imageRecognition()
                            progressBar.visibility = View.GONE

                        }
                }
            }
        }, 2000)

Ответы [ 2 ]

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

Да, вы можете попробовать свой фрагмент кода с помощью Kotlin Coroutines , например:

GlobalScope.launch(Dispatchers.Main) { // We launch new coroutine with Main thread as dispatcher
    fabClose()
    isOpen = false
    rec_view.adapter=null
    progressBar.visibility = View.VISIBLE
    // Here delay is suspended function which stops further execution of thread without blocking it.
    delay(2000L) // We provide non-blocking delay for 2 second which suspends this coroutine execution
    imageRecognition()
    progressBar.visibility = View.GONE
}

Здесь GlobalScope используется для создания нашей lauch сопрограммы с Main Thread CoroutineContext (Можно также использовать async, различие между ними заключается в типе возвращаемого ими значения) и мы помещаем наш асинхронный код в последовательном порядке, где Coroutine обрабатывает его выполнение асинхронно.

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

Хотя вы можете использовать сопрограммы, то, что вы пытаетесь достичь, кажется довольно простым, но только то, что ваш код выглядит немного более замысловатым, чем необходимо.

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

// Code to show the loader here
Handler(Looper.getMainLooper()).postDelayed({
    // Code to show the recyclerview here 
}, 2000)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...