我创建了委托来初始化使用协程的GoogleMap
实例。正确分配地图片段,直到我在地图引用上调用任何方法,然后地图挂起并停止响应。
这是我的代表:
class MapInitializer(private val setUp: GoogleMap.() -> Unit) : ReadOnlyProperty<AppCompatActivity, GoogleMap> {
var instance: GoogleMap? = null
override fun getValue(thisRef: AppCompatActivity, property: KProperty<*>): GoogleMap {
return instance ?: thisRef.loadMap().apply(setUp).also { instance = it }
}
private fun AppCompatActivity.loadMap(): GoogleMap = runBlocking {
async { registerCallback() }.await()
}
private suspend fun AppCompatActivity.registerCallback(): GoogleMap = suspendCoroutine { continuation ->
(supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment).getMapAsync {
continuation.resume(
it
)
}
}
}
我认为地图线程正在挂起,但我不知道为什么。请帮助。