簡體   English   中英

Dagger 2創建的對象在Android中保留多長時間/ Dagger 2如何與Android Activity生命周期一起玩?

[英]How long do objects created by Dagger 2 remain in Android / how does Dagger 2 play with the Android Activity lifecycle?

假設我們有一個@Singleton應用程序模塊,它創建並返回一個用於存儲配置數據的Hashmap 如果配置數據在hashmap中被修改並且android應用程序進入后台並且讓我們說onPause()和onStop()被調用。

  • 是否會破壞由dagger創建的hashmap?
  • 如果應用程序返回到前台,那么添加到hashmap的現有配置數據是否仍然存在?

Dagger 2如何使用Android Activity生命周期?

它不會。 但是你可以。

匕首除了Pojos之外別無他法。 Pojos知道依賴關系並在需要時將它們提供給您。 沒有更多,僅此而已。

如何使用這些對象(組件)完全取決於您。

正如大多數示例所示,通常有一個AppComponent ,保存在Application ,每個Activity都有一些ActivtiyComponent

AppComponent保存在應用程序中,以共享其生命周期 - 如果應用程序被殺死或重新創建,組件也是如此,對象也是如此。

ActivityComponent已創建並保留在活動中。 再一次,如果重新創建活動,組件也是如此。 它只是分配給您活動中的字段的對象。

那么為什么應用程序和活動組件之間存在差異?

應用程序組件僅引用應用程序上下文,並提供可以在沒有進一步信息的情況下提供的類。

活動組件還將包含有關活動的信息。 它可以訪問視圖,片段處理程序等:活動內容! 您為每個活動創建一個新組件,因為如果您不使用匕首,您還將使用當前活動而不是引用(和泄漏!)到處都是相同的活動。

回答你的問題

如果現在還不清楚,如果你在AppComponent創建你的HashMap (和@Scope它!),如果你正確使用你的AppComponent ,它將是整個應用程序中的相同HashMap 一旦應用程序與您的Application實例一起終止,它將被銷毀。

如果在ActivityComponent創建它,它將具有與活動對象相同的生命周期。 如果savedInstanceState包含您的數據,您可能必須重新初始化onCreate中的內容。


這一切都說,不要使用靜態變量。 如果將組件分配給靜態變量,它們將破壞設置並導致內存泄漏。

如果您在onCreate創建組件,則無需任何其他設置即可。 只是不要使用靜態變量來保存組件,但要確保它分別位於您的活動或應用程序中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM