Nucleusは内部的に静的マップを使用します。実際、Nucleusは、プレゼンタによって実行されるリクエスト(rxjava)からプレゼンタインスタンスへのマッピングをより多くします。これは、ニュークリアスがPresenterインスタンスを保持せず、Request(RxJava)を保持し、それを新しいプレゼンタインスタンスに再接続することを意味します。
モスビー2.0は、フラグメントを保持または活動のためlastNonConfiguration方法がプレゼンターを維持するために使用しています。 UIを持つフラグメントを保持することには何も問題はありません。保持フラグメントの唯一の欠点は、それらをバックスタックに置くことができないことです。 Mosby 3.0(SNAPSHOTは利用可能ですが、バックスタックの断片はまだ実装されていません)では、すべてのプレゼンターがホスティング活動のライフサイクルにバインドされたマップに保存されます。つまり、プレゼンターはバックスタッキングの非再発フラグメントのために保管することができます。 Nucleusとは対照的に、それらはアクティビティのライフサイクルの間だけ保持されるか、またはユーザによるバックスタックから削除されます(ナビゲーション)。さらに、これによりMosby 3.0はカスタムビュー(FrameLayoutなど)もサポートできます。
is it possible to preserve Presenters when navigating away from Fragment/Activity?
はい、どうしてですか?ビューがまったく表示されない場合は、プレゼンターを維持する必要が本当にありますか?それにもかかわらず、NucleusとMosbyの両方がそうすることができます。
問題がsetRetainInstance(true)を使用し、フラグメント間アニメーション遷移を使用する場合、私は、(LeakCanaryによって検出された)メモリリークを持っています。 setRetainInstance(false)を設定すると、メモリーリークは発生しません。 setRetainInstance(true)を使用せずにMosbyでPresenterを保持できますか? – SuitUp
メモリリークは、 'Fragment.onViewDestroyed()'であなたのフラグメント(トランジション、ClickListenersなど)への参照を適切にクリーンアップしないためであり、Mosbyやプレゼンターを保持しているためではありません。 Mosby 2.0ではまだできませんが、3.0でサポートされる予定です(約1ヶ月でリリース予定)。ただし、Mosby 2.0ではPresenterを再起動できます。 ViewStateのMosbyのドキュメントをチェックしてください。 – sockeqwe
これは事をクリアします。今私は次のプロジェクトであなたの素晴らしい図書館を使わない理由はありません!どうもありがとうございました! – SuitUp