Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android MVP下载大文件的正确解决方案_Android_Mvp - Fatal编程技术网

Android MVP下载大文件的正确解决方案

Android MVP下载大文件的正确解决方案,android,mvp,Android,Mvp,我使用MVP。 假设我想下载一个大文件(大约20MB大小) 以下选项: 在演示者中下载文件 下载模型中的文件 下载服务中的文件 别的 最好的解决方案是什么 p.S.活动随时可能破坏。例如,当旋转屏幕时。我建议您将文件下载到存储库中,该存储库是从用例(模型)调用的 应该从演示者异步调用用例,结果将通过回调返回,如果该视图未被破坏,则更新视图 但所有数据都应该加载到存储库中(api调用、文件数据、gps位置数据等)。这样,您的模型和演示者就不依赖于数据的加载方式或加载位置,如果数据的来源发生更改,则

我使用MVP。 假设我想下载一个大文件(大约20MB大小)

以下选项:

  • 在演示者中下载文件
  • 下载模型中的文件
  • 下载服务中的文件
  • 别的
  • 最好的解决方案是什么


    p.S.活动随时可能破坏。例如,当旋转屏幕时。

    我建议您将文件下载到存储库中,该存储库是从用例(模型)调用的

    应该从演示者异步调用用例,结果将通过回调返回,如果该视图未被破坏,则更新视图

    但所有数据都应该加载到存储库中(api调用、文件数据、gps位置数据等)。这样,您的模型和演示者就不依赖于数据的加载方式或加载位置,如果数据的来源发生更改,则不应更改


    如果您决定使用DownloadManager,这可能是最好的解决方案,我认为代码应该在presenter、model和repository之外,因为它们应该是平台无关的,没有android代码。通过这种方式,可以更容易地对此文件执行单元测试。

    如果您想将其保留在后台,则最好选择标准DownloadManager-在IntentService/JobSchedulerin模型或presenter中下载文件,但不能保证您的活动会在下载后继续。如果我使用模型作为下载文件。。但如果激活度被破坏(如旋转屏幕)。模型在活动重新创建后还能存活吗?是的,我的做法是,如果用户执行屏幕旋转或活动/片段暂停,则使用dagger,模型和演示者不会被破坏。我想你能找到的所有mvp示例代码也会这样工作。如果视图被破坏,演示者会收到事件,但不会取消存储库操作,除非你调用用例来取消存储库调用,以防你想这样做。顺便说一下,对于方向的改变,我总是每个活动至少有一个片段,并遵循以下指南:是的,实际上可能是最好的解决方案。但是在这种情况下,代码应该在演示者、模型和存储库之外,因为这部分应该是平台无关的,并且没有android代码。这样就更容易对这些文件执行单元测试。