精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

在 Android 和 Hilt 中限定作用域

移動開發 Android
將對象 A 的作用域限定到對象 B,指的是對象 B 的整個生命周期內始終持有相同的 A 實例。當涉及到 DI (依賴項注入) 時,限定對象 A 的作用域為一個容器,則意味著該容器在銷毀之前始終提供相同的 A 實例。

將對象 A 的作用域限定到對象 B,指的是對象 B 的整個生命周期內始終持有相同的 A 實例。當涉及到 DI (依賴項注入) 時,限定對象 A 的作用域為一個容器,則意味著該容器在銷毀之前始終提供相同的 A 實例。

[[339194]]

在 Hilt 中,您可以通過注解將類型的作用域限定在某些容器或組件內。例如,您的應用中有一個處理登錄和注銷的 UserManager 類型。您可以使用@Singleton 注解將該類型的作用域限定為ApplicationComponent (ApplicationComponent 是一個被整個應用的生命周期管理的容器)。被限定作用域的類型在應用組件中沿組件層次結構向下傳遞: 在本案例中,相同的 UserManager 實例將被提供給層次結構內其余的 Hilt 組件。應用中任何依賴于 UserManager 的類型都將獲得相同的實例。

  • 組件層次結構https://developer.android.google.cn/training/dependency-injection/hilt-android#component-hierarchy

注意: 默認情況下,Hilt 中的綁定都未限定作用域。這些綁定不屬于任何組件,并且可以在整個項目中被訪問。每次被請求都會提供該類型的不同實例。當您將綁定的作用域限定為某個組件時,它會限制您使用該綁定的范圍以及該類型可以具有的依賴項。

在 Android 中,您不使用 DI 庫也可以通過 Android Framework 來手動限定作用域。讓我們看看如何手動限定作用域,以及如何改用 Hilt 來限定作用域。最后,我們將比較使用 Android Framework 手動限定作用域和使用 Hilt 限定作用域的區別。

在 Android 中限定作用域

看了上文的定義,您可能會有這樣的異議: 在某個特定類中使用一個類型的實例變量也可以做到限定該變量類型的作用域。沒錯!不使用 DI 時,您可以執行如下操作:

  1. class ExampleActivity : AppCompatActivity() { 
  2.   private val analyticsAdapter = AnalyticsAdapter() 
  3.   ... 

analyticsAdapter 變量的作用域被限定為 MyActivity 的生命周期,這意味著只要 Activity 沒有被銷毀,該變量就是同一個實例。如果另一個類出于某種原因需要訪問這個被限定了作用域的變量,每次訪問也會獲得相同實例。當新的MyActivity 實例被創建時 (如系統設置改變),一個新的 AnalyticsAdapter 實例將會被創建。

使用 Hilt,等效代碼如下:

  1. @ActivityScoped 
  2. class AnalyticsAdapter @Inject constructor() { ... } 
  3.  
  4. @AndroidEntryPoint 
  5. class ExampleActivity : AppCompatActivity() { 
  6.  
  7.  @Inject lateinit var analyticsAdapter: AnalyticsAdapter 
  8.  

每次創建的 MyActivity 都會持有一個 ActivityComponent DI 容器的新實例,在 Activity 被銷毀之前,該實例將向組件層次結構下的依賴項提供相同的AnalyticsAdapter 實例。

  • 組件層次結構https://developer.android.google.cn/training/dependency-injection/hilt-android#component-hierarchy


更改系統設置后,您將獲得一個新的 AnalyticsAdapter 和 MainActivity 實例

通過 ViewModel 限定作用域

然而,我們可能希望 AnalyticsAdapter 可以在系統設置更改后留存!或者說,我們希望直到用戶離開 Activity 之前,都限定該實例的作用域為 Activity。

為此,您可以使用組件架構中的 ViewModel,因為它可以在系統設置更改后留存。

  • 組件架構中的 ViewModelhttps://developer.android.google.cn/topic/libraries/architecture/viewmodel

不使用依賴項注入時,您可能有如下代碼:

  1. class AnalyticsAdapter() { ... } 
  2.  
  3. class ExampleViewModel() : ViewModel() { 
  4.   val analyticsAdapter = AnalyticsAdapter() 
  5.  
  6. class ExampleActivity : AppCompatActivity() { 
  7.  
  8.   private val viewModel: ExampleViewModel by viewModels() 
  9.   private val analyticsAdapter = viewModel.analyticsAdapter 
  10.  

通過這種方式,您將 AnalyticsAdapter 的作用域限定為 ViewModel。因為 Activity 具有 ViewModel 的訪問權限,所以在該 Activity 中可以始終獲得相同的 AnalyticsAdapter 實例。

通過使用 Hilt,您可以通過限定 AnalyticsAdapter 的作用域為ActivityRetainedComponent 來實現相同的行為,因為ActivityRetainedComponent 也可以在系統設置更改后留存。

  1. @ActivityRetainedScoped 
  2. class AnalyticsAdapter @Inject constructor() { ... } 
  3.  
  4. @AndroidEntryPoint 
  5. class ExampleActivity : AppCompatActivity() { 
  6.  
  7. @Inject lateinit var analyticsAdapter: AnalyticsAdapter 
  8.  

 

通過使用 ViewModel 或者 Hilt 中的 ActivityRetainedScope 注解,您可以在系統設置更改后獲得相同的實例

 

如果您希望在遵循良好的 DI 實踐的同時,保留 ViewModel 用于處理視圖邏輯,您可以使用 @ViewModelInject 提供 ViewModel 的依賴項,該注解的詳細描述請參見: 文檔 | 使用 Hilt 注入 ViewModel 對象。這樣一來,AnalyticsAdapter 的作用域就無需被限定為ActivityRetainedComponent,因為此時它的作用域被手動限定為 ViewModel:

  • 文檔 | 使用 Hilt 注入 ViewModel 對象https://developer.android.google.cn/training/dependency-injection/hilt-jetpack#viewmodels
  1. class AnalyticsAdapter @Inject constructor() { ... } 
  2.  
  3. class ExampleViewModel @ViewModelInject constructor( 
  4.   private val analyticsAdapter: AnalyticsAdapter 
  5. ) : ViewModel() { ... } 
  6.  
  7. @AndroidEntryPoint 
  8. class ExampleActivity : AppCompatActivity() { 
  9.  
  10.   private val viewModel: ExampleViewModel by viewModels() 
  11.   private val analyticsAdapter = viewModel.analyticsAdapter 
  12.  

我們剛才所看到的內容,可以應用到任何由 Android Framework 生命周期類管理的 Hilt 組件中。點擊查看全部可用作用域。回到我們最初的示例,將作用域限定為 ApplicationComponent,等同于不使用 DI 框架時在 Application 類中持有該實例。

  • 全部可用作用域https://developer.android.google.cn/training/dependency-injection/hilt-android#component-scopes

對比 Hilt 及 ViewModel 限定作用域

使用 Hilt 限定作用域,優勢為您可在 Hilt 組件層次結構中使用被限定的類型;而對于 ViewModel,則必須通過 ViewModel 手動訪問被限定作用域的類型。

使用 ViewModel 限定作用域,優勢為您可以在應用中任何 LifecyclerOwner對象中持有 ViewModel。例如,如果您使用了 Jetpack Navigation 庫,則可以將 ViewModel 綁定到 NavGraph 上。

  • LifecyclerOwner https://developer.android.google.cn/reference/androidx/lifecycle/LifecycleOwner
  • Jetpack Navigation 庫https://developer.android.google.cn/guide/navigation/navigation-getting-started
  • NavGraphhttps://developer.android.google.cn/reference/androidx/navigation/fragment/NavHostFragment

Hilt 提供的作用域數量有限。可能沒有符合您特定使用場景的作用域。例如嵌套 Fragment,對于這種情況,您可以退一步使用 ViewModel 限定作用域。

使用 Hilt 注入 ViewModel

如上文所述,您可以使用 @ViewModelInject 向 ViewModel 注入依賴項。其原理是這些綁定關系保存在 ActivityRetainedComponent 中,這也是為什么您只能注入未限定作用域的類型,或者是限定作用域為ActivityRetainedComponent 以及 ApplicationComponent 的類型。

如果 Activity 或 Fragment 被 @AndroidEntryPoint 注解修飾,就可以通過getDefaultViewModelProviderFactory() 方法獲取 Hilt 生成的 ViewModel 工廠了。由于可以在 ViewModelProvider 中使用這些 ViewModel 工廠,使您獲取 ViewModel 的方式變得更加靈活。例如: 將作用域限定為BackStackEntry 的 ViewModel。

限定作用域會有一些代價,因為提供的對象在持有者被銷毀之前將一直保留在內存中。請在應用中慎重地考慮使用限定作用域的對象。如果對象的內部狀態要求使用同一實例,對象需要同步,或者對象的創建成本很高,那么限定作用域是恰當的做法。

當然,當您需要限定作用域時,您可以使用 Hilt 中的作用域注解,也可以直接使用 Android Framework。

責任編輯:未麗燕 來源: 谷歌開發者
相關推薦

2011-09-06 09:56:24

JavaScript

2021-03-09 08:35:51

JSS作用域前端

2019-03-13 08:00:00

JavaScript作用域前端

2017-09-14 13:55:57

JavaScript

2011-03-18 09:27:00

Spring

2010-01-22 11:13:44

三層交換機

2021-06-02 07:02:42

js作用域函數

2022-08-24 16:50:59

人工智能機器學習DevOps

2019-03-10 08:13:28

物聯網戰場海洋

2023-09-05 08:23:56

SpringScope方法

2020-03-24 08:32:24

vue作用域前端

2021-07-06 11:40:28

Android框架代碼

2011-05-12 18:26:08

Javascript作用域

2010-09-25 16:10:09

添加DHCP作用域

2021-07-01 07:34:08

NLP推薦系統

2010-06-13 17:21:41

Linux下dhcp測

2021-12-06 07:15:48

Javascript作用域閉包

2009-06-01 11:16:48

PHP網站開發變量作用域

2010-05-25 16:04:45

VoIPVoWLAN

2022-04-29 07:35:49

SpringMVC構造函數
點贊
收藏

51CTO技術棧公眾號

亚洲老头同性xxxxx| 欧美午夜精品在线| 国产精品一国产精品最新章节| 九九久久免费视频| 欧美理论电影在线精品| 色婷婷综合久久久久中文一区二区 | 国产一区二区三区免费不卡| 成人毛片一区二区三区| 欧美激情1区| 亚洲男人天堂视频| ass极品水嫩小美女ass| 精品欧美一区二区三区在线观看| 亚洲青青青在线视频| 九色视频成人porny| 国产一区二区三区黄片| 一区二区三区导航| 美女国内精品自产拍在线播放| 中国av免费看| 精品视频在线播放一区二区三区| 狠狠色狠色综合曰曰| 美女黄色片网站| 国产亚洲依依| 成人毛片视频在线观看| 国产日韩欧美中文| 色一情一乱一伦| 欧美日韩第一区| 中文字幕日韩在线观看| 欧美精品黑人猛交高潮| 日韩一区网站| 制服丝袜中文字幕亚洲| 国产裸体免费无遮挡| caoprom在线| 亚洲精品福利视频网站| 亚洲在线视频一区二区| 日本中文字幕电影在线观看 | 国产成人亚洲欧美| 国产麻豆精品一区| 久久国产精品一区二区| 国产精品1234| 久久精品视频5| 中文一区二区| 91国偷自产一区二区三区的观看方式| 日韩在线观看视频一区二区| 欧美xxxx中国| 最近2019中文字幕第三页视频| 国产精品亚洲无码| 亚洲+变态+欧美+另类+精品| 欧美精品一区二区三区在线播放 | 国产成人在线看| 成人黄色网免费| 一二三区中文字幕| 精品一区二区三区在线观看 | www.中文字幕在线| 男人天堂视频在线观看| 欧美日韩激情网| 国产中文字幕免费观看| 97se综合| 欧洲国产伦久久久久久久| 丰满少妇在线观看| 国产成人精品一区二区三区免费| 欧美性xxxxx极品少妇| 中文字幕欧美人妻精品一区| 日韩制服一区| 欧美日韩国产成人在线91| 91丨九色丨蝌蚪| 不卡一区视频| 欧美大胆人体bbbb| www国产视频| 亚洲影院天堂中文av色| 国产亚洲精品久久久久久| 九九热久久免费视频| 天天影视天天精品| 欧美国产第一页| 日韩精品国产一区二区| 久久一二三四| 国产一区视频在线播放| 亚洲爱情岛论坛永久| 成人精品gif动图一区| 欧美不卡福利| 日本不卡不卡| 亚洲资源在线观看| 丰满爆乳一区二区三区| 欧美日韩尤物久久| 5566中文字幕一区二区电影| 中文字幕在线观看91| 神马久久av| www.日韩免费| 日韩精品在线不卡| 六月丁香综合在线视频| 91在线短视频| 国产在线观看黄| 亚洲另类在线视频| av网站在线观看不卡| 欧美韩国日本| 日韩大片在线观看视频| 污污视频网站在线免费观看| 国产精品chinese| 国产精品狠色婷| 亚洲国产剧情在线观看| 国产欧美1区2区3区| 日本一级黄视频| 欧美男体视频| 日韩午夜精品电影| 国产美女永久免费无遮挡| 中国成人一区| 国产成人一区二区三区小说| 亚洲高清在线观看视频| 日本一二三四高清不卡| 久久久久久www| 95精品视频| 亚洲人成电影在线观看天堂色| www.5588.com毛片| 久久一区视频| 国产免费一区二区三区| 免费人成在线观看播放视频| 大桥未久av一区二区三区| 国产高清999| 欧美日韩中文一区二区| 91精品国产成人| www.国产三级| 中文字幕日韩av资源站| 99久久激情视频| 麻豆精品少妇| 欧美肥臀大乳一区二区免费视频| 怡红院男人的天堂| 久久精品一区二区三区不卡| 久久久久久人妻一区二区三区| 亚洲香蕉久久| 丝袜美腿精品国产二区| 日韩人妻精品中文字幕| 91视频免费观看| 国产一线二线三线女| 国产在线视频欧美一区| 深夜福利一区二区| 国产精品高清无码| 国产午夜精品久久久久久免费视| 久久久久久人妻一区二区三区| 日韩欧美三区| 日韩一中文字幕| 中文字字幕在线观看| 国产亚洲一本大道中文在线| 国产二区视频在线播放| 美女午夜精品| 77777亚洲午夜久久多人| 亚洲欧美另类一区| 亚洲国产成人91porn| 久久久久亚洲av无码专区首jn| 91精品国产自产拍在线观看蜜| 国产精品美女午夜av| 成人18在线| 欧美日韩国产免费一区二区| 中文字幕av久久爽一区| 青青草视频一区| 亚洲一卡二卡三卡| 一区二区三区无毛| 久久香蕉国产线看观看av| 国产日韩免费视频| 亚洲自拍偷拍网站| 手机免费看av片| 国产情侣久久| 日韩欧美第二区在线观看| a∨色狠狠一区二区三区| 中文精品99久久国产香蕉| 中文字幕网址在线| 亚洲日本青草视频在线怡红院| 中文字幕亚洲影院| 牛夜精品久久久久久久99黑人| 99re国产在线播放| cao在线视频| 亚洲男人天堂九九视频| 亚洲天堂手机版| 亚洲免费在线视频一区 二区| 色姑娘综合天天| 在线播放不卡| 欧美最大成人综合网| 欧美a视频在线| 欧美高清视频一区二区| 青青草视频免费在线观看| 日本高清不卡aⅴ免费网站| 国产在线免费看| 成人黄色小视频在线观看| 北条麻妃在线观看| 91精品久久久久久久久久不卡| 亚洲伊人一本大道中文字幕| av在线理伦电影| 在线观看中文字幕亚洲| 国产夫妻性生活视频| 欧美日韩国产页| 黑人狂躁日本娇小| av在线播放一区二区三区| 日本成人黄色网| 国产精品vip| 日韩视频精品| 成人av影音| 国产在线播放91| 亚洲校园激情春色| 九九精品在线播放| 成人高清网站| 亚洲电影天堂av| ,亚洲人成毛片在线播放| 亚洲成人免费视| 三级黄色在线观看| 久久嫩草精品久久久久| 亚洲高清av一区二区三区| 久久久久欧美精品| www.av91| 国产精品毛片久久| 欧美极品视频一区二区三区| 久久wwww| 国产欧美一区二区三区视频| 欧美伦理91| 欧美精品免费播放| www在线免费观看| 亚洲级视频在线观看免费1级| 91超薄丝袜肉丝一区二区| 狠狠色狠狠色综合日日小说| 黄色一级视频免费观看| 国产精品国产三级国产普通话蜜臀 | 日韩精品久久久久久久酒店| 国产精品久久久久久久久晋中 | 91深夜福利视频| 黄色亚洲网站| 97国产成人精品视频| 成人日韩欧美| 日韩中文字幕在线免费观看| 欧洲一级在线观看| 亚洲精品美女在线| 六月婷婷综合网| 欧美成人女星排名| 国产婷婷在线视频| 制服丝袜亚洲播放| 亚洲视频中文字幕在线观看| 色婷婷av一区二区三区大白胸| 精品无码人妻一区二区三区品| 亚洲青青青在线视频| 色哟哟一一国产精品| 中文字幕一区二区三中文字幕| 免费人成又黄又爽又色| 91在线观看下载| 黄色片视频免费观看| a在线欧美一区| 四虎成人免费视频| 成人丝袜18视频在线观看| 极品人妻一区二区| 国产91丝袜在线观看| 伊人久久久久久久久| 成人免费高清视频在线观看| 原创真实夫妻啪啪av| 国产精品一区二区视频| 永久免费黄色片| 国产成人精品一区二区三区四区| xxx中文字幕| 国产精品一区二区无线| 动漫av在线免费观看| 国产91丝袜在线播放| 天天躁日日躁狠狠躁av麻豆男男 | 欧美日本视频在线| 国产欧美一级片| 欧美v日韩v国产v| 天天操天天操天天操| 精品亚洲国产成av人片传媒 | 亚洲一级一级97网| 91伦理视频在线观看| 精品久久久av| 三级资源在线| 51午夜精品视频| 欧洲av一区二区| 成人黄色片网站| 精品国产一区二区三区成人影院 | 麻豆系列在线观看| 美女精品视频一区| 91黄页在线观看| 国产成人中文字幕| 国产一区二区久久久久| 国产精品美女黄网| 蜜桃视频欧美| 香蕉视频在线网址| 中文欧美日韩| 亚洲精品永久视频| 成人自拍视频在线观看| 亚洲第九十七页| 亚洲欧洲成人av每日更新| 国产在线观看你懂的| 色吊一区二区三区| 99免费在线视频| 日韩乱码在线视频| 黄色免费在线观看网站| 性欧美xxxx交| 香蕉成人在线| 精品一区久久久| 欧美jizz| 黄色成人在线看| 久草这里只有精品视频| av电影在线播放| 国产精品女人毛片| www.av麻豆| 欧美一区二区女人| 国产高清在线观看| 高清在线视频日韩欧美| 亚洲久草在线| 品久久久久久久久久96高清| 午夜精品婷婷| 无限资源日本好片| 99久久综合99久久综合网站| 91精品少妇一区二区三区蜜桃臀| 中文字幕乱码视频| 中文字幕亚洲综合久久五月天色无吗''| 日本三级中文字幕在线观看| 亚洲另类视频| 精品久久久99| 久久先锋影音av鲁色资源 | 国产亚洲欧洲997久久综合| 青青草原在线免费观看| 色妹子一区二区| 韩国中文字幕hd久久精品| 亚洲男人天堂手机在线| 日本电影在线观看| 91精品国产综合久久久久久蜜臀| 国产ts一区| 99热一区二区三区| 日本特黄久久久高潮| 国产又粗又猛又色| 一区二区在线看| 97超碰人人草| 上原亚衣av一区二区三区| 国模套图日韩精品一区二区| 99蜜桃在线观看免费视频网站| 成人久久一区| 国产成人无码av在线播放dvd| 99视频精品全部免费在线| 欧美做爰爽爽爽爽爽爽| 欧美猛男gaygay网站| 国产小视频在线| 欧美最顶级的aⅴ艳星| 精品亚洲精品| 欧美大片在线播放| 不卡大黄网站免费看| 毛片a片免费观看| 日韩一级免费一区| 亚洲精品白浆| av色综合网| 黄色亚洲大片免费在线观看| 韩国三级在线播放| 亚洲一级在线观看| 亚洲h视频在线观看| 欧美高清视频在线观看| 视频国产精品| 久久99久久99精品| 成人黄色在线视频| 在线观看亚洲欧美| 日韩极品精品视频免费观看| 欧美日韩国产观看视频| 另类视频在线观看+1080p| 老牛影视一区二区三区| 久久久久无码精品国产sm果冻| 欧美在线观看一区二区| 日本高清视频在线观看| 亚洲精品免费在线视频| 国内精品亚洲| 精品人妻少妇嫩草av无码| 一本大道久久a久久综合| 番号在线播放| 亚洲a级在线观看| 欧美日韩国产免费观看| 老司机午夜免费福利| 欧美日韩国产精品一区| chinese偷拍一区二区三区| 国产日本欧美在线观看 | 精品国产一区二区三区久久久狼| 亚洲黑人在线| 青青草国产免费| 久久久99免费| 国产精品熟女久久久久久| 欧美福利在线观看| 久久不见久久见中文字幕免费| 国产九九热视频| 亚洲精品少妇30p| 天堂a中文在线| 国产在线视频2019最新视频| 国产真实久久| 欧美大波大乳巨大乳| 欧美一区二区在线免费播放| av免费不卡国产观看| 日本一区二区三区免费看| 久久99精品国产.久久久久久| 一区二区三区免费高清视频| 亚洲欧美中文日韩v在线观看| 亚洲精品三区| 国产女大学生av| 亚洲日本在线天堂| 污污网站免费在线观看| 国产日本欧美一区二区三区| 伊人影院久久| 国产日韩精品中文字无码| 欧美大片一区二区| 日韩精品麻豆| 九色自拍视频在线观看| 日韩一区在线看| 日本一卡二卡四卡精品| 亚洲综合小说区|