問題タブ [nsurlsessiondownloadtask]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - デリゲートを呼び出さずに NSURLSession ダウンロードを再開する
NSURLSession に関連するアプリでの奇妙な動作に気付きました。
バックグラウンド構成で NSURLSession を使用してダウンロードを開始すると、ダウンロードは問題なく開始されますが、ある時点で、明らかにランダムで、数秒間停止し、他のデリゲートを呼び出さずに再起動します
リセットされたバイト数で。
誰が何が起こっているのか教えてもらえますか?
セッションを初期化する方法は次のとおりです
- 編集 -
私はRobの提案に従い、CharlesとxCodeデバッガーを使用して、物事が起こる順序は次のとおりであることがわかりました:
- セッションを作成
- を呼び出します
getTasksWithCompletionHandler
。セッションにはタスクがありません - ダウンロード タスクを開始します
- デリゲート
URLSession:didReceiveChallenge:completionHandler:
が呼び出され、完了ハンドラを呼び出しますcompletionHandler(NSURLSessionAuthChallengePerformDefaultHandling,nil);
- デリゲートからのログは
didWriteData:
、ID 1 のダウンロード タスクがデータをダウンロード中であることを示し、ダウンロードは Charles のステータスを受信応答本文で示します - ランダムな時点で、Charles のダウンロード ステータスが [完了] に変わり、新しいダウンロードが開始されたことを確認できます。
- デリゲート
URLSession:didReceiveChallenge:completionHandler:
が呼び出され、完了ハンドラを呼び出しますcompletionHandler(NSURLSessionAuthChallengePerformDefaultHandling,nil);
- デリゲートからのログは
didWriteData:
、ID 2 のダウンロード タスクがデータをダウンロード中であることを示しています。新しいダウンロードは、Charles にステータス受信応答本文で表示されます。
ios - NSURLSession ダウンロード タスクは、デフォルトのセッション構成でデバッグ中にメモリを増やします
NSURLSession
iOS 7 以降を使用してファイルをダウンロードするアプリがあります。次のようにタスクを開始します。
完了ハンドラー ( URLSession:downloadTask:didFinishDownloadingToURL:
) で、ファイルをアプリケーション データ フォルダーに移動invalidateAndCancel
し、セッションで呼び出します。プログレス ハンドラー ( didWriteData:totalBytesWritten:totalBytesExpectedToWrite:
) では、進行状況をログに記録するだけです。
これがデバッグで実行されると、メモリ使用量が急速に増加し、ダウンロードされたデータ量の数倍になります。ただし、バックグラウンド タスクで実行すると、メモリ使用量は一定になります。
ダウンロード タスクで既定のセッション構成を使用するのはよくありませんか? 設定すべきキャッシュ プロパティはありますか? 何が起きてる?
更新:私が知る限り、これはデバッガーが接続されている場合にのみ発生します。デバッガーを使用せずにシミュレーターで起動すると、アクティビティ モニターでメモリ使用量の増加が見られません。
更新 2:これは iOS 8.3 で修正されたようです。わーい!
ios - NSURLSessionを使用して、ダウンロードタスクのキャンセル時に受信データまたは一時ファイルの場所を取得する方法
を使用して複数のファイルをダウンロードしていますが、ダウンロードタスクNSURLSession
をキャンセルしてもダウンロードしたデータを保存し、再開時に残りのデータのダウンロードを開始したいです。じぶんの
が呼び出されていません。
ダウンロードするマイコード:
objective-c - NSURLSession downloadTask がメモリを解放しない
顧客はサーバーに短時間で数回のダウンロードを実装することができず、非常に多くのファイル (500-1000 のダウンロード) がある場合、backgroundDownloadTaks は非常に一貫性がなかったため、バックグラウンド NSURLSession なしで NSURLDownloadTask を使用することにしました。
大量のファイルで問題なく機能しますが、不便な点があります。メモリの警告が表示されるまで、メモリ使用量は常に増加しています。取得したら、保留中のタスクをキャンセルして NSURLCache を解放しますが、メモリは解放されないため、ダウンロードを再開すると同じメモリ警告が表示されます。
タスクをキャンセルするために cancelWithResumeData を使用していません。
これは私のコードです
そして、これらはメモリ使用量の 2 つのスナップショットです
ファイルのダウンロード時に増加するメモリ使用量
ダウンロード タスクは停止しますが、メモリは解放されません
メモリを解放できないのはなぜですか?
助けてくれてありがとう
ios - AFNetworking でダウンロードの進行状況を取得できません
次のコードを使用して、AFNetworking 2.0 を使用してファイルをダウンロードしようとしています。
// 進捗のためにここにオブザーバーを追加します
observeValueForKeyPath
そして、これがメソッドからの NSLog です
ご覧のとおり、合計ユニット数は-1です。その結果、私fractionCompleted
は 0 だと思い、UI を更新できません。私が犯している間違いは何ですか?
これを参考にしました。 AFNetworking 2.0 でダウンロードの進行状況を取得するには?
また、このスレッドで同様の議論が行われていますが、その理由を理解できませんでした。 https://github.com/AFNetworking/AFNetworking/issues/1398
編集
応答ヘッダーの投稿
ios - バックグラウンドで NSURLSessionDownloadTask を使用しているときにディスク容量が不足するとどうなりますか?
iOS 8.1 アプリNSURLSessionDownloadTask
では、バックグラウンドでアーカイブをダウンロードするために使用していますが、これは非常に大きくなることがあります。
すべて正常に動作しますが、電話のディスク容量が不足するとどうなりますか? ダウンロードが失敗し、それがディスク容量の残りの問題であったことを示しますか? 事前に確認する良い方法はありますか?