假设我们有一个@Singleton应用程序模块,它创建并返回一个用于存储配置数据的Hashmap.如果配置数据在hashmap中被修改并且android应用程序进入后台并且让我们说onPause()和onStop()被调用.
>匕首创建的hashmap会被销毁吗?
>如果应用程序返回到前台,那么添加到hashmap的现有配置数据是否仍然存在?
解决方法:
How does Dagger 2 play with the Android Activity lifecycle?
它不会.但是你可以.
匕首除了Pojos之外别无他法. Pojos知道依赖关系并在需要时将它们提供给您.没有更多,仅此而已.
如何使用这些对象(组件)完全取决于您.
正如大多数示例所示,通常有一个AppComponent,保存在Application中,每个Activity都有一些ActivtiyComponent.
AppComponent保存在应用程序中,以共享其生命周期 – 如果应用程序被杀死或重新创建,组件也是如此,对象也是如此.
ActivityComponent已创建并保留在活动中.再一次,如果重新创建活动,组件也是如此.它只是分配给您活动中的字段的对象.
那么为什么应用程序和活动组件之间存在差异?
应用程序组件仅引用应用程序上下文,并提供可以在没有进一步信息的情况下提供的类.
活动组件还将包含有关活动的信息.它可以访问视图,片段处理程序等:活动内容!您为每个活动创建一个新组件,因为如果您不使用匕首,您还将使用当前活动而不是引用(和泄漏!)到处都是相同的活动.
回答你的问题
如果现在还不清楚,如果你在AppComponent中创建你的HashMap(和@Scope它!),如果你正确使用你的AppComponent,它将是整个应用程序中的相同HashMap.一旦应用程序与您的Application实例一起终止,它将被销毁.
如果在ActivityComponent中创建它,它将具有与活动对象相同的生命周期.如果savedInstanceState包含您的数据,您可能必须重新初始化onCreate中的内容.
这一切都说,不要使用静态变量.如果将组件分配给静态变量,它们将破坏设置并导致内存泄漏.
如果您在onCreate中创建组件,则无需任何其他设置即可.只是不要使用静态变量来保存组件,但要确保它分别位于您的活动或应用程序中.
标签:android,dagger-2 来源: https://codeday.me/bug/20190527/1166965.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。