2016-04-05 3 views
1

どのようにこれを行う?構成が変更されたときにプレゼンターをどのように保持しますか?MVPを実装する際にAndroidのプレゼンターを保存するベストプラクティスは何ですか?

別の質問:それは断片/ Activityから離れて移動するときプレゼンターを維持することは可能でしょうか?

私は、このようなモスビーや核とMVPのためのフレームワークを使用して気にしないが、私はモスビーの方法が最善のアプローチではないと思います。 UIを持つフラグメントでFragment.setRetainInstance(true)を使用することは、ここの多くの記事では使用しないでください。バックスタックでは使用しないでください。たぶん良い方法がありますか?

答えて

2

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の両方がそうすることができます。

+0

問題がsetRetainInstance(true)を使用し、フラグメント間アニメーション遷移を使用する場合、私は、(LeakCanaryによって検出された)メモリリークを持っています。 setRetainInstance(false)を設定すると、メモリーリークは発生しません。 setRetainInstance(true)を使用せずにMosbyでPresenterを保持できますか? – SuitUp

+0

メモリリークは、 'Fragment.onViewDestroyed()'であなたのフラグメント(トランジション、ClickListenersなど)への参照を適切にクリーンアップしないためであり、Mosbyやプレゼンターを保持しているためではありません。 Mosby 2.0ではまだできませんが、3.0でサポートされる予定です(約1ヶ月でリリース予定)。ただし、Mosby 2.0ではPresenterを再起動できます。 ViewStateのMosbyのドキュメントをチェックしてください。 – sockeqwe

+0

これは事をクリアします。今私は次のプロジェクトであなたの素晴らしい図書館を使わない理由はありません!どうもありがとうございました! – SuitUp

関連する問題