如何在 MVVM 中使用 LocationListener?

How to use LocationListener in MVVM?

我想让应用程序以 MVVM 模式慢跑,但我不知道将 LocationListener 放在哪里。如何正确使用 LocationListener 和 MVVM?存储库? 为了测试,我创建了这样的东西。这只是检查操作的测试,它工作正常,但这不是 MVVM。

class GPSLocationListener(private var activity: MainActivity) : LocationListener {

lateinit var location: Location

override fun onLocationChanged(location: Location?) {
    val speed : Double = (location!!.speed * 3600 / 1000).toDouble()
    activity.updateUI(speed)
    this.location = location
}

override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {
    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}

override fun onProviderEnabled(provider: String?) {
    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}

override fun onProviderDisabled(provider: String?) {
    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}

传递 view(main activity) 对 GPSLocationListener 的引用是错误的做法,因为它可能是内存泄漏的原因(看看 this 关于内存泄漏就明白了更好)

另一方面,监听设备的位置与 Android 平台 相关,因此应在 activityfragment[= 中处理14=]

如果您将根据位置请求的结果执行繁重的操作,您应该将视图模型与 RxJava 或协程一起使用,然后您应该在视图中收听数据(包装在 LiveData 中)(activity -片段)