Android: доступ к контексту активности из TimerTask - PullRequest
0 голосов
/ 08 января 2020

Есть ли способ доступа к контексту активности из объекта TimerTask? Вот что у меня есть, но я получаю ошибки при попытке получить доступ к this (Контекст действия) из объекта TimerTask. Приведенный ниже код содержится в Activity:

    Timer().schedule(object : TimerTask() {
        override fun run() {
            runOnUiThread(object : Runnable {
                override fun run() {
                    startActivity(Intent(this, HomeScreenActivity::class.java))
                    finish()
                }
            })
        }
    }, 2)

Как видите, я попытался запустить задачу на

runOnUiThread (...)

но я все еще не могу получить доступ к контексту Activity. Любая помощь будет принята с благодарностью!

1 Ответ

2 голосов
/ 08 января 2020

this относится к this самой непосредственной включающей функции, которая в данном случае является вашей Runnable. Используйте this@MyActivity, чтобы указать свой внешний класс активности, где MyActivity - имя этого класса.

Необходимо использовать runOnUiThread не по той причине, по которой вы его пытались, а потому, что вы не можете запустить действие из фонового потока.

Кстати, Kotlin предоставляет некоторые функции расширения и преобразования SAM, которые могут сделать ваш код более читабельным:

Timer().schedule(2000L) {
    runOnUiThread {
        startActivity(Intent(this@MyActivity, HomeScreenActivity::class.java))
        finish()
    }
}
...