【问题标题】:Android: Access activity context from TimerTaskAndroid:从 TimerTask 访问活动上下文
【发布时间】:2020-04-26 09:57:04
【问题描述】:

是否可以从 TimerTask 对象访问活动上下文?这是我到目前为止所拥有的,但是在尝试从 TimerTask 对象访问 this(Activity context) 时遇到错误。以下代码包含在 Activity 中:

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

如您所见,我尝试在

上运行任务

runOnUiThread(...)

但我仍然无法访问 Activity 上下文。任何帮助将不胜感激!

【问题讨论】:

    标签: android kotlin android-context timertask


    【解决方案1】:

    this 指的是最直接的封闭函数的this,在这种情况下是您的 Runnable。使用this@MyActivity 指定您的外部活动类,其中MyActivity 是该类的名称。

    必须使用runOnUiThread 不是因为您尝试使用它的原因,而是因为您无法从后台线程启动活动。

    顺便说一句,Kotlin 提供了一些扩展函数和 SAM 转换,可以使您的代码更具可读性:

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

    【讨论】:

    • 解决了我的问题。谢谢!