ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android-Dagger2范围和活动生命周期

2019-10-26 10:29:02  阅读:185  来源: 互联网

标签:dagger-2 mvp android


我有一个Android活动,正在使用Dagger2将Presenter注入其中.我希望Presenter能够保持状态,即使发生配置更改也是如此.

例如,我将使用Presenter发起网络呼叫,如果用户在进行网络呼叫时旋转设备,我希望能够在设备完成旋转之后接收响应,并且不必重新启动呼叫.

我被绊倒了,因为如果我将Presenter实例的范围限定在Activity的生命范围内,那么当Activity在配置更改期间通过onDestroy()进行操作时,Presenter不会被垃圾回收吗?我的另一个想法是使用在应用程序生命周期内有效的范围.但是,如果这样做,我如何确保一旦Activity被永久销毁(不是由于配置更改,而是按下返回按钮之类的东西),就可以对Presenter进行垃圾收集?

有没有一种方法可以确保我的Presenter在活动的配置更改中不会丢失,并且在应用程序的生命周期内不会泄漏?

解决方法:

我强烈建议您不要尝试实施此方法.

您正在有效地尝试使用DI框架来支持特定于活动的生命周期流程,尽管DI框架并非旨在像这样使用.

我最近回答了another similar question,其中OP试图在不同活动之间共享视图模型中的状态.尽管用例不完全相同,但一般模式是相同的-尝试将流控制职责委托给DI框架,这不是一个好主意.

在您的情况下(IMHO)最好的方法是在旋转之前存储当前状态,在旋转时重新初始化演示者,然后恢复其状态.

您在轮换期间存储状态的方式取决于您要尝试保留的内容:

>如果您需要保留与UI相关的状态(选择,文本,元素的位置等),则可以使用常规的onSaveInstanceState()和onRestoreInstanceState()回调
>如果您需要保留一些与业务相关的状态(正在进行的网络请求,数据,数据修改等),则将此逻辑封装在业务类(例如SomeBusinessUseCaseManager)中,并从具有范围的应用程序范围组件中注入该类.

您可以找到Dagger范围here的详细评论.

有关Android中DI的更多信息,请参见here.

标签:dagger-2,mvp,android
来源: https://codeday.me/bug/20191026/1935532.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有