首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么要为ApplicationContext对象添加注释@ApplicationContext?

为什么要为ApplicationContext对象添加注释@ApplicationContext?
EN

Stack Overflow用户
提问于 2021-06-17 01:40:48
回答 1查看 261关注 0票数 1

代码A来自https://developer.android.com/codelabs/android-hilt#6

代码B来自https://developer.android.com/codelabs/android-hilt#7

我发现注释@ApplicationContext是在代码A中的appContext: Context之前添加的,而在代码B中的私有val活动: FragmentActivity之前没有添加任何注释,为什么?

我还能用代码C代替代码A吗?

码A

代码语言:javascript
运行
复制
@Module
object DatabaseModule {

    @Provides
    @Singleton
    fun provideDatabase(@ApplicationContext appContext: Context): AppDatabase {
       ...
    }
  
}

码B

代码语言:javascript
运行
复制
class AppNavigatorImpl @Inject constructor(
    private val activity: FragmentActivity
) : AppNavigator {
    ...
}

代码C

代码语言:javascript
运行
复制
@Module
object DatabaseModule {

    @Provides
    @Singleton
    fun provideDatabase(appContext: ApplicationContext): AppDatabase {
       ...
    }
  
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-17 03:10:04

单身人士的寿命比活动长。由于活动是上下文的一个子类型,如果将其传递给一个挂起引用的单例(只是将其用作上下文),则该活动已经泄漏。@ApplicationContext是一个指示符,表明您只应该将应用程序上下文作为函数的参数传递。应用程序的上下文在应用程序的生命周期内是恒定的,所以它是防泄漏的。

注释是一种记录的方式,您不应该将活动作为上下文传递,但是Lint也可以警告您,如果您不小心这样做的话。

代码C没有意义,因为您已经设置了ApplicationContext类型的参数,它是一个注释类,不是上下文子类型。

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

https://stackoverflow.com/questions/68011856

复制
相关文章

相似问题

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