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.
-
Use
@Injectfor code you own. -
Use
@Providesfor code you don’t own. -
Use
@Bindsfor injecting interfaces while generating less DI code.
12.確保Module中的所有provide方法都是靜態的,這樣Dagger就永遠都不需要初始化它
13.可以通過@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();
使用該介面
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/332119.html
標籤:其他
