1.@HiltAndroidApp注解Application为其生成一个应用级别的component
2.@AndroidEntryPoint注解会生成独立的component,可以接收自己和父层级提供的依赖
如果一个类依赖了@AndroidEntryPoint注解的类,该类也必须要用此注解
3.@Inject注解构造方法告诉Hilt如何提供该类的实例
4.每次Hilt需要提供实例时,都会执行提供依赖项函数,默认每次都会重新创建一个实例
5.@InstallIn 指的是绑定可使用范围。例如@InstallIn(ActivityComponent.class)表示该Module中的绑定可以在ActivityComponent及其以下的层级使用。注意跟@Scoped的区别
6.Hilt根据对应Android 类的生命周期自动创建或者销毁生成的component实例
7.ActivityRetainedComponent不会在 configuration change 的时候销毁,所以是在Activty第一次onCreate和最后一次onDestroy的时候创建和销毁
8.@Scoped指的是绑定共享范围。例如通过@ActivityScoped注解绑定类或者绑定函数,表示该绑定在某个ActivityComponent的生命周期里只创建一次,本层级及以下层级共享同一个绑定
对于采用构造函数提供依赖的方式,在该类上方使用注解指定作用域
对于采用Module @Provides或者@Binds提供依赖的方式,在提供函数上注解指定作用域
9.默认情况下,所有的绑定是没有作用域限制的。
绑定的作用域必须要与安装到的组件的作用域一致。如果是采用注解绑定类的方式,则应该使用依赖该类的最高层级Component对应的作用域。
10.可以通过@ApplicationContext Context context或者Application application两种方式获取
Application context
11.可以通过@EntryPoint为@AndroidEntryPoint不支持的类将其作为依赖提供出去,例如
public class ExampleContentProvider extends ContentProvider {
@EntryPoint
@InstallIn(SingletonComponent.class)
interface ExampleContentProviderEntryPoint {
public AnalyticsService analyticsService();
}
...
}
@EntryPoint
@InstallIn(SingletonComponent.class)
interface ExampleContentProviderEntryPoint {
public AnalyticsService analyticsService();
}
...
}
然后通过
EntryPointAccessors.fromApplication(appContext, ExampleContentProviderEntryPoint.class); AnalyticsService analyticsService = hiltEntryPoint.analyticsService();
使用该接口



