当我的应用程序在前台运行时,我看到定期调用:
class SourceType
{
public int Id;
public string Name;
public int Age { get; set; }
// other properties
}
class DestinationType
{
public int Id;
public string Name;
public int Age { get; set; }
// other properties
}
List<SourceType> sourceList = new List<SourceType>();
sourceList.Add(new SourceType { Id = 1, Name = "1111", Age = 35});
sourceList.Add(new SourceType { Id = 2, Name = "2222", Age = 26});
sourceList.Add(new SourceType { Id = 3, Name = "3333", Age = 43});
sourceList.Add(new SourceType { Id = 5, Name = "5555", Age = 37});
List<DestinationType> destinationList = new List<DestinationType>();
destinationList.Add(new DestinationType { Id = 1, Name = null });
destinationList.Add(new DestinationType { Id = 2, Name = null });
destinationList.Add(new DestinationType { Id = 3, Name = null });
destinationList.Add(new DestinationType { Id = 4, Name = null });
var mapped= destinationList.Join(sourceList, d => d.Id, s => s.Id, (d, s) =>
{
d.Name = s.Name;
d.Age = s.Age;
return d;
}).ToList();
当我的应用程序移至后台并暂停时,对此方法的调用将停止,因此我对NSURLSessionDownloadTask是否继续下载没有任何反馈。是否有任何技术可以获得有关下载的反馈?
答案 0 :(得分:1)
通过查看有关NSURLSessionDownloadTask
的其他StackOverflow帖子,存在很多混淆。以下是我发现的反馈机制:
Instruments
来捕获流程nsurlsessiond
在后台下载期间使用xcode Window->Devices->Download Container
从手机下载应用。您将在/Library/Caches/com.apple.nsurlsessiond/Downloads/[id]/CFNetworkDownload_...tmp
中找到部分下载文件的缓存版本,其中[id]
是您在创建NSURLSessionConfiguration
对象时提供的唯一ID。在后台下载期间,缓存版本的大小会增加,因此您可以多次下载容器以验证下载是否正在进行。下载完成后,将删除缓存版本。
等待下载完成。如果您的应用程序在后台并在下载完成时暂停,则iOS会将您的应用程序从挂起状态移至后台主动运行,并按此顺序调用以下方法:
通过AppDelegate中的UIApplicationDelegate -> handleEventsForBackgroundURLSession
触发调用completionHandler()
方法
NSURLSessionTaskDelegate -> NSURLSession:task:didCompleteWithError:
NSURLSessionDelegate -> :URLSessionDidFinishEventsForBackgroundURLSession:
我还在github here上放了一个非常基本的NSURLSessionDownload示例应用程序。