【发布时间】:2017-09-04 14:36:58
【问题描述】:
我正在使用 Xamarin.iOS 并实施下载管理器。
我找到了一个关于如何在 swift 中实现 DownloadManager 的教程,在该教程的指导下,我已经将用 swift 编写的逻辑转录为 C#。 DownloadManager 工作并将操作排队并执行它们。我面临的唯一问题是应用程序过渡到暂停模式。队列的行为不是那么确定的。有时会执行所有排队的操作,有时应用会停止执行。
用例 1: 我开始文件同步并锁定 iPad。大多数时候执行排队的操作。但有时当我解锁 iPad 时,应用程序被发送到后台,我必须双击主页按钮才能返回应用程序,在这种情况下,文件同步在执行过程中以某种方式停止。
用例 2: 我启动文件同步并将应用程序发送到后台。与前一个用例中的行为相同。有时会执行所有操作,有时会停止操作。
用例 3: 客户开始同步并在一段时间后离开 iPad 无人看管,但他回来后同步未完成且应用程序处于后台。平均大约 70% 的同步已完成。
对于实现,我使用了一个以“DownloadOperation”作为元素的“NSOperationQueue”。 “DownloadOperation”只是 NSOperation 对象的包装,执行设置为“异步”。
可能的问题
- 我不确定当应用程序更改状态时“NSOperationQueue”会发生什么?
- 使用“NSOperationQueue”是实现 DownloadManager 的“正确”方式吗?
- 是否有优化“NSOperationQueue”和/或“NSOperation”执行的常用技巧
期待讨论。
P.S.我已启用“后台模式”和“后台获取”
【问题讨论】:
-
我认为您只需要一个取消触发器,您可以为任务执行此操作,不确定 NSOperationQueues。如果可以实现取消调用触发器,您就会知道操作是否停止,以及应用重新加载时能够相应地处理它。
-
@Digitalsa1nt 我不想取消操作,我希望它们在应用程序终止后继续执行。这就是将 OperationQueue 和 NSUrlSession 与 NSOperations 一起使用的原因。但是感谢您的评论,我希望有人对这个问题有所了解。
-
在 iOS 终止您的应用程序后,您不能让代码无限期地运行。或者我应该说这样做违反了苹果的指导方针。希望有人会为您找到工作。 :)
-
@Digitalsa1nt 嗯,这有点令人困惑,因为在关于如何实现下载管理器的指南中,他们说下载/上传操作应该由系统处理,实现这些事情的方法是使用 OperationQueue 和 NSUrlSession。我的意思是像 DropBox 或 gDrive 这样的提供商如何实现这些东西会很好,因为他们必须同步他们的数据。我也希望能找到一些东西。祝你有美好的一天:D
标签: c# ios xamarin.ios nsoperation nsoperationqueue