所以我遵循Clean Architecture来设计我的应用程序。我有一个Activity
带视图的寻呼机,里面有两个Fragment
。PagerAdapter
我通过 Dagger 为这个注入了。
我知道调用setRetainInstance(true)
一个片段可以防止它被破坏,并且getActivity()
如果 Activity 被破坏,在这样的片段上可能会返回一个问题。在我的活动处于后台并且活动已(可能)被破坏后尝试恢复我的活动时,我得到了 NullPointException。
所以我的问题是
- 有没有更好的方法来完成我想要做的事情?
- 有人可以指出我的任何资源吗?
- 如果片段已被破坏,也不确定为什么片段和适配器仍然处于活动状态。LeakCanary 没有内存泄漏。
我的活动有一个 Dagger 组件 MainActivityComponent 注入如下。并且还扩展了 HasComponent。有关这方面的更多信息,请参阅HasComponent
MainActivity.java
DaggerMainActivityComponent.builder()
.applicationComponent(getApplicationComponent())
.activityModule(getActivityModule())
// Module for each fragment
.conversationListModule(new ConversationListModule(this))
.friendsListModule(new FriendsListModule(this))
.build()
.inject(this);
获取Activity的组件
// Cause of the NullPointException getActivity()
protected <C> C getComponent(Class<C> componentType) {
return componentType.cast(((HasComponent<C>) getActivity()).getComponent());
}
让我知道你们是否有任何困惑。我知道我的解释是一团糟。谢谢
更新
似乎即使我删除setRetainInstance(true)
了这个错误也没有被阻止。