【发布时间】:2018-04-09 08:51:27
【问题描述】:
我有一个使用 Dagger2 的应用 组件在Application的onCreate中实例化:
@Override
public void onCreate() {
super.onCreate();
mComponent = DaggerApplicationComponent.builder()
.applicationModule(new ApplicationModule(this))
.build();
}
Dagger 正在管理一个“CacheRepository”,它是一个存储用户在整个应用程序中使用的数据的类。
我遇到的问题是:当应用程序被系统杀死时,应用程序被破坏并且组件的实例丢失。但是当我再次启动该应用程序时,该应用程序会尝试恢复其先前的状态,其中包括从缓存中获取数据,该缓存现已重新初始化。因此应用程序崩溃,因为数据为空。
我怎样才能防止这种情况发生?
一个简单的选择是在被系统杀死时强制应用从头开始重新启动,但我还没有找到任何解决方案。
另一种解决方案是将缓存存储在 SharedPreferences(或任何类型的存储)中,但我不喜欢这种解决方案,因为缓存中的大部分数据都是临时的,它会使应用程序更加复杂。
【问题讨论】:
-
How can I prevent that?您必须将有价值的信息保存在磁盘上(SharedPreferences,sqlite,作为纯文件)或将其保存在Bundle。 -
您可以使用 Realm、sqllite 等在本地 IE 中保存数据。另一种解决方案是为您的 dagger CacheRepository 研究自定义范围。
-
@willermo 是的,但这是我想避免的,因为我的组件中的数据应该只在应用程序处于活动状态时使用,而我在重新启动应用程序时不需要它们从一开始。
标签: android dagger-2 application-lifecycle