代码之家  ›  专栏  ›  技术社区  ›  Karol Kulbaka

GoogleMap使用协同例程挂起初始值设定项

  •  0
  • Karol Kulbaka  · 技术社区  · 7 年前

    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 回复  |  直到 7 年前