Я создал делегат для инициализации 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
)
}
}
}
Я предполагаю, что поток карты приостановлен, но я понятия не имею, почему. Помогите пожалуйста.