GoogleMap приостановил инициализатор с сопрограммой - PullRequest
0 голосов
/ 09 ноября 2018

Я создал делегат для инициализации 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
            )
        }
    }
}

Я предполагаю, что поток карты приостановлен, но я понятия не имею, почему. Помогите пожалуйста.

...