• Paul Shan
    2022-04-11
    思考题:viewModelScope是一个CloseableCoroutineScope,这个对象是懒加载的,第一次使用的时候才会创建,一旦创建以后,这个对象有一个close函数,会在ViewModel clear的时候调用,确保了viewModelScope的Coroutine scope和viewModel生命周期一致。了viewModelScope总体上和lifecycle的scope实现类似。区别是创建的时候,lifecycle用的是无锁+不断循环+compareAndSet方式,而viewModelScope实现的是synchronized带锁的方式,请问老师Android为什么会在两种类似的情况下采用不同的线程同步策略?

    作者回复: Lifecycle只是简单的单个状态变更,所以用CAS能够最大程度保证效率。ViewModel使用synchronized,主要还是因为其中的mBagOfTags,它是一个Map,Android官方因为一些旧系统的限制,导致无法使用ConcurrentHashMap,所以才出此下策。

    共 3 条评论
    6
  • 遥远的救世主
    2022-09-15 来自浙江
    Android KTX 已经归档,不推荐使用了
    共 3 条评论
    