我今天早些时候提出了一个问题(find it here) 大数据到服务器,一个人评论并说一个后台任务 应该处理这份工作。
我假设他/她意味着一个线程应该处理任务。
所以现在我的问题是:如何创建一个等待输入的线程?
这个过程看起来像这样:
当数据完全传输后,线程就会被破坏。
注意:我没有使用HTTP,我在TCP上使用TCP和我的自定义协议。
说明: 我需要保持线程等待的原因是因为当我打开200MB或更大的非常大的资产时,需要一些时间来加载资产。
资产数据越大,应用程序必须等待的时间越长。
如果我只想要一个2MB的资产块,我必须加载资产,等待一段时间才能加载它,复制一块2MB,然后退出完成块。
然后我发送数据,等待服务器发送ACK信号,然后重复该过程。
这需要一些时间,网络活动显示应用程序无法执行任何操作,有几秒钟的死时间,这都是因为资产需要的时间加载。
我上一个问题中的人说,最好在后台任务中加载资产而不是离开requestImageForAsset
的完成块,只是让任务继续运行,直到块发送完毕,然后发送下一个块。
我希望这可以解决任何进一步的混淆。
答案 0 :(得分:1)
对你的问题的简短回答是,你不是。
每当主线程注意到需要加载资产时,它应该在调度队列上放置一个作业来加载资产。
https://developer.apple.com/library/ios/documentation/Performance/Reference/GCD_libdispatch_Ref/
如果您使用的是Swift或Objective-C,则不提。无论哪种方式,这都应该有意义:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// copy a chunk of data from the asset and assemble a network packet
// send the network packet and wait
dispatch_async(dispatch_get_main_queue(), ^{
// inform the main thread that the information has been received.
});
});
另请查看此资源:http://www.raywenderlich.com/79149/grand-central-dispatch-tutorial-swift-part-1