zow*_*oww 10 ui-thread ios avplayer
似乎api replaceCurrentItemWithPlayerItem:将主线程卡住几秒钟,我明白更换项目需要新项目的信息,这可能需要一些时间来预加载.但是问题出现了,为什么replaceCurrentItemWithPlayerItem:用一个nil项目对象也会卡住主线程?在我看来,有时需要超过5秒的时间才能替换nil playerItem.我想知道如何避免这个问题.谢谢你的任何建议!
Xin*_*ng 4
当我UICollectionView通过 .NET 在本地照片库中显示和预览视频时,我遇到了类似的阻塞 UI 线程问题ALAssetLibrary。
切换视频时滚动不流畅,所以我猜测某些方法阻塞了UI线程。然后我使用Core Animation来Instruments分析到底是什么占用了UI线程。Time Profiler我发现replaceCurrentItemWithPlayerItem在主线程中需要大约30ms才能执行,这超过了16ms (1000/60(fps)) 导致滚动不稳定。
为了解决这个问题,首先我尝试replaceCurrentItemWithPlayerItem使用GCD放入后台线程,但是它不起作用。我不确定是否是因为Cocoa本身在调用时需要更新UI replaceCurrentItemWithPlayerItem,这意味着UI线程仍然被阻塞。最后我通过将其放在replaceCurrentItemWithPlayerItem滚动端(委托)来使其工作func scrollViewDidEndDecelerating(scrollView: UIScrollView)。现在滚动很顺利,是的!
因此,我的建议很明显:使用 Instruments 来分析到底是什么占用了 UI 线程