私はXamarin.iOSで作業しており、Downloadmanagerを実装しています。Xamarin.iOSダウンロードマネージャー
私はすぐにダウンロードマネージャを実装するチュートリアルを見つけました。このチュートリアルでは、C#に素早く書かれたロジックを書きました。 DownloadManagerは動作し、操作を待ち行列に入れて実行します。私が直面している唯一の問題は、Appのサスペンドモードへの移行です。キューの動作はあまり決定的ではありません。場合によっては、すべてのキューに入れられた操作が実行され、アプリケーションが実行を中止することがあります。
ユースケース1: 私はファイルの同期を開始し、iPadをロックします。ほとんどの場合、キューに入れられた操作が実行されます。しかし時々私がiPadのロックを解除すると、アプリケーションはバックグラウンドに送られ、アプリケーションに戻るためにホームボタンを2回タップしなければならない。この場合、ファイルの同期は途中で何とか止まった。
使用ケース2:私はファイルの同期を開始し、バックグラウンドでアプリを送信します。以前の使用例と同じ動作です。場合によってはすべての操作が実行され、操作が停止することがあります。
ユースケース3:お客様が同期を開始し、帰ってから数時間が経過して同期が完了せず、アプリケーションがバックグラウンドになると、iPadが無人状態になります。平均して約70%の同期が行われます。
私は、要素として "DownloadOperation"を持つ "NSOperationQueue"を使用しました。 "DownloadOperation"は、 "Asynchronous"に設定された実行を持つNSOperationオブジェクトのラップです。
可能性のある質問
- 私は、アプリケーションの状態が変化したとき、「NSOperationQueue」に何が起こるかわかりませんか?
- "NSOperationQueue"の使用法は、DownloadManagerの実装に適していますか?
- 「NSOperationQueue」および/または「NSOperation」の議論を楽しみにしてい
の実行の最適化のための任意の一般的なヒントがあります。
P.S. "背景モード"と "バックグラウンドフェッチ"を有効にしました
私はあなたがキャンセルトリガを必要と思う、あなたはタスクのためにこれを行うことができます、NSOperationQueuesについてはわかりません。 cancallationトリガーを実装することができれば、操作が停止するか、アプリのリロードがそれに応じてそれを処理できるかどうかがわかります。 – Digitalsa1nt
@ Digitalsa1nt私は操作をキャンセルしたくないので、私は彼らがアプリケーションが終了した後も実行を継続したい。これが、NSOperationsでOperationQueueとNSUrlSessionを使用する理由です。しかし、あなたのコメントに感謝します。私は誰かがこの問題の手がかりを持っていることを願っています。 –
iOSがアプリケーションを終了した後、コードを無期限に実行し続けることはできません。あるいはそうするためのリンゴのガイドラインに違反していると言わなければならない。うまくいけば、誰かがあなたの周りの仕事を見つけるだろう。 :) – Digitalsa1nt