首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么@DelicateCoroutinesApi是使用GlobalScope的必要条件

为什么@DelicateCoroutinesApi是使用GlobalScope的必要条件
EN

Stack Overflow用户
提问于 2021-07-31 05:38:55
回答 1查看 6.8K关注 0票数 15

我正在使用Kotlin,现在android工作室建议我添加

这是一个微妙的API,它的使用需要小心。确保您完全阅读并理解声明的文档,该声明被标记为微妙的API。

当我点击

代码语言:javascript
运行
复制
add @DelicateCoroutinesApi annotation to function

它添加了类似于以下内容的@DelicateCoroutinesApi

代码语言:javascript
运行
复制
@DelicateCoroutinesApi
fun getAmount(activity: LoginActivity, user:FirebaseUser){
      mFireStore.collection(Constants.AMOUNT).document(user.uid).get().
            addOnSuccessListener { d ->
                 activity.amountGetSuccess( d, user)
            }
 }

当我使用coroutine时,它建议我再看看另一个例子

代码语言:javascript
运行
复制
@DelicateCoroutinesApi
 private fun playsound() {

   GlobalScope.launch {
        withTimeout(10L) {
            // play sound
   val  mPlayerPress = MediaPlayer.create(this, R.raw.button_press)
            mPlayerPress.start()
        }
    }

我的问题是为什么这个@DelicateCoroutinesApi @DelicateCoroutinesApi的工作是什么?

EN

回答 1

Stack Overflow用户

发布于 2021-07-31 05:47:10

@DelicateCoroutinesApi注释对于某些API使用是必需的,如果您查看它所述的文档

标记协同中的声明,这些声明是、微妙的-,它们有有限的用例,在一般代码中应该谨慎使用。任何微妙声明的使用都必须仔细检查,以确保它被正确使用,并且不会造成内存和资源泄漏等问题。仔细阅读任何标记为DelicateCoroutinesApi的声明的文档。

GlobalScope的使用需要这样的注释,因为GlobalScope落入了“https://elizarov.medium.com/the-reason-to-avoid-globalscope-835337445abc”中。

这是因为kotlin协同器遵循结构化并发的原则,这意味着只有在特定的CoroutineScope中才能启动新的协同线,该CoroutineScope确定了coroutine的生存期。例如,如果您使用viewModelScope启动协同线,则一旦ViewModel被销毁,该协同线将被取消。

但是另一方面,GlobalScope创建全局路径,它们的生命周期是程序员的责任,如果由于某种原因(网络延迟等)这些全局协同无法完成,那么它们就会继续运行和消耗系统资源,这种行为连同其他问题会导致内存泄漏,从而导致DelicateCoroutinesApi

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68599452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档