私はClean Architectureに従ってアプリケーションを設計していました。私はFragment
が2つあるビューページャを持つActivity
を持っています。私はこのためにPagerAdapter
をDaggerから注入しています。Dagger2とsetRetainInstance(true)を使用しているときにNullPointExceptionを取得します。
フラグメント上のsetRetainInstance(true)
を呼び出すと、そのフラグメントが破棄されるのを防ぐことができます。アクティビティが破棄されると、そのフラグメントのgetActivity()
が問題を返すことがあります。バックグラウンドでアクティビティが(おそらく)破棄された後、自分のアクティビティを再開しようとするとNullPointExceptionが発生します。
だから私の質問は
- は、私が何をしようとしている達成するために良い方法はありますか?
- 誰かが私に指摘できるリソースはありますか?
- フラグメントが破棄された場合でもフラグメントとアダプタがまだアクティブである理由は不明です。私はLeakCanaryでメモリリークを取得しません。
私のアクティビティには、次のように注入されるダガーコンポーネント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);
取得活動のコンポーネントを参照してください
// Cause of the NullPointException getActivity()
protected <C> C getComponent(Class<C> componentType) {
return componentType.cast(((HasComponent<C>) getActivity()).getComponent());
}
は、あなたたちは混乱を持っているなら、私を知ってみましょう。私の説明は混乱であることは分かっています。おかげ
更新
私はsetRetainInstance(true)
を削除しても、このエラーが防止されていないようです。アプリケーションは、しばらくの間、バックグラウンドでとどまり、最近表示された活動は、アンドロイドによってリサイクルされたときに