代码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
@Module
object DatabaseModule {
@Provides
@Singleton
fun provideDatabase(@ApplicationContext appContext: Context): AppDatabase {
...
}
}
码B
class AppNavigatorImpl @Inject constructor(
private val activity: FragmentActivity
) : AppNavigator {
...
}
代码C
@Module
object DatabaseModule {
@Provides
@Singleton
fun provideDatabase(appContext: ApplicationContext): AppDatabase {
...
}
}
发布于 2021-06-17 03:10:04
单身人士的寿命比活动长。由于活动是上下文的一个子类型,如果将其传递给一个挂起引用的单例(只是将其用作上下文),则该活动已经泄漏。@ApplicationContext
是一个指示符,表明您只应该将应用程序上下文作为函数的参数传递。应用程序的上下文在应用程序的生命周期内是恒定的,所以它是防泄漏的。
注释是一种记录的方式,您不应该将活动作为上下文传递,但是Lint也可以警告您,如果您不小心这样做的话。
代码C没有意义,因为您已经设置了ApplicationContext类型的参数,它是一个注释类,不是上下文子类型。
https://stackoverflow.com/questions/68011856
复制相似问题