2017-12-11 2 views
2

私はMVPを使用しています。 大きなファイル(サイズが20 MBのファイル)をダウンロードしたいとします。ここでMVP大きなファイルをダウンロードする正しい解決方法

オプション:サービスでモデルで

  1. プレゼンター
  2. でファイルのダウンロード
  3. ファイルのダウンロード
  4. ファイルのダウンロード
  5. 何か他

最善の解決策は何ですか?

P.S.活動はいつでも破壊することができます。例えば。画面を回転させるとき。

+2

標準DownloadManagerは、バックグラウンドで保存したい場合 - モデルまたはプレゼンターのIntentService/JobScheduler –

+0

でファイルをダウンロードすると、あなたの活動がこのダウンロードに対して生き残るという保証はありません。 –

答えて

0

ファイルを、ユースケース(モデル)から呼び出されるリポジトリにダウンロードすることをお勧めします。

ユースケースはプレゼンタから非同期に呼び出され、結果がコールバックによって返され、このビューが破棄されていない場合はビューが更新されます。

しかし、すべてのデータはリポジトリ(api呼び出し、ファイルのデータ、GPSの場所データなど)に読み込まれる必要があります。この方法では、モデルとプレゼンターはデータの読み込み方法や場所に依存せず、データの起点が変更された場合は変更しないでください。

おそらく最適な解決策であるDownloadManagerを使用することを決めた場合、プラットフォームに依存せず、アンドロイドコードを持たないため、コードは発表者、モデル、リポジトリの外にある必要があります。この方法では、このファイルに対して単体テストを実行する方が簡単です。

+0

モデルをダウンロードファイル用に使用していますが、活動性が破壊されている場合(例:画面を回転)モデルはアクティビティの再作成から生き残っていますか? – Alex

+0

はい、ユーザーがスクリーンローテーションを実行したり、アクティビティ/フラグメントが一時停止していると、ダガー、モデル、プレゼンターを使って、私がやる方法は破壊されません。私はあなたが見つけることができるすべてのmvpサンプルコードもこのように動作すると思います。 – jeprubio

+0

ビューが破棄された場合、プレゼンターはイベントを受け取りますが、リポジトリ呼び出しをキャンセルするためにユースケースを呼び出さない限り、リポジトリのアクションはキャンセルされません。 – jeprubio

関連する問題