用协程暂停GoogleMap的初始化程序

时间:2018-11-09 16:09:44

标签: android kotlin maps coroutine

我创建了委托来初始化使用协程的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
            )
        }
    }
}

我认为地图线程正在挂起,但我不知道为什么。请帮助。

0 个答案:

没有答案