Kotlin:如何在binder中返回正在运行的服务实例?

时间:2017-10-26 12:32:25

标签: android kotlin

我为Service编写了 Java 代码,并尝试将其转换为 Kotlin

class MyService : Service() {

    companion object MyBinder : Binder() {
        fun getService() : MyService? {
            return MyService::class.objectInstance
        }
    }

    // service implementation

}

问题在于,活动getService()始终返回null。我确信service之前已经开始了,我在logcat中看到它。我建议Java代码中的这个自动生成的行应该不同但我找不到解决方案:

return MyService::class.objectInstance   

在Java代码中它是:

return MyService.this 

2 个答案:

答案 0 :(得分:12)

下面的代码将有助于您的

class MyService : Service() {

    inner class MyBinder : Binder() {
        fun getService() : MyService? {
            return this@MyService
        }
    }

    // service implementation

}

有关Kotlin中此表达式的更多信息 This Expression

答案 1 :(得分:0)

这是这样做的简短方法(另外包括onBind())

class MyService : Service() {

    override fun onBind(intent: Intent) = LocalBinder()

    inner class LocalBinder : Binder() {
        fun getService() = this@SensorService
    }
}