私はMVPを使用しています。 大きなファイル(サイズが20 MBのファイル)をダウンロードしたいとします。ここでMVP大きなファイルをダウンロードする正しい解決方法
オプション:サービスでモデルで
- プレゼンター でファイルのダウンロード
- ファイルのダウンロード
- ファイルのダウンロード
- 何か他
最善の解決策は何ですか?
P.S.活動はいつでも破壊することができます。例えば。画面を回転させるとき。
私はMVPを使用しています。 大きなファイル(サイズが20 MBのファイル)をダウンロードしたいとします。ここでMVP大きなファイルをダウンロードする正しい解決方法
オプション:サービスでモデルで
最善の解決策は何ですか?
P.S.活動はいつでも破壊することができます。例えば。画面を回転させるとき。
ファイルを、ユースケース(モデル)から呼び出されるリポジトリにダウンロードすることをお勧めします。
ユースケースはプレゼンタから非同期に呼び出され、結果がコールバックによって返され、このビューが破棄されていない場合はビューが更新されます。
しかし、すべてのデータはリポジトリ(api呼び出し、ファイルのデータ、GPSの場所データなど)に読み込まれる必要があります。この方法では、モデルとプレゼンターはデータの読み込み方法や場所に依存せず、データの起点が変更された場合は変更しないでください。
おそらく最適な解決策であるDownloadManagerを使用することを決めた場合、プラットフォームに依存せず、アンドロイドコードを持たないため、コードは発表者、モデル、リポジトリの外にある必要があります。この方法では、このファイルに対して単体テストを実行する方が簡単です。
モデルをダウンロードファイル用に使用していますが、活動性が破壊されている場合(例:画面を回転)モデルはアクティビティの再作成から生き残っていますか? – Alex
はい、ユーザーがスクリーンローテーションを実行したり、アクティビティ/フラグメントが一時停止していると、ダガー、モデル、プレゼンターを使って、私がやる方法は破壊されません。私はあなたが見つけることができるすべてのmvpサンプルコードもこのように動作すると思います。 – jeprubio
ビューが破棄された場合、プレゼンターはイベントを受け取りますが、リポジトリ呼び出しをキャンセルするためにユースケースを呼び出さない限り、リポジトリのアクションはキャンセルされません。 – jeprubio
標準DownloadManagerは、バックグラウンドで保存したい場合 - モデルまたはプレゼンターのIntentService/JobScheduler –
でファイルをダウンロードすると、あなたの活動がこのダウンロードに対して生き残るという保証はありません。 –