2015-12-03 24 views
6

api replaceCurrentItemWithPlayerItem:メインスレッドが数秒間スタックされているようです。アイテムを置き換えるには、事前ロードに時間がかかる可能性のある新しいアイテムの情報が必要です。しかし、質問がなぜ起こったのですか?のアイテムオブジェクトと一緒にreplaceCurrentItemWithPlayerItemを実行すると、メインスレッドがスタックされますか?それは、時にはそれがないプレーヤーアイテムを置き換えるために5秒以上かかることが私に起こります。 問題を避けるために何ができるのだろうか。アドバイスありがとう!iOS AVPlayer replaceCurrentItemWithPlayerItem:nilブロックUIスレッド

答えて

1

UICollectionViewを使用してローカルフォトライブラリのビデオをALAssetLibraryで表示しプレビューすると、同様のブロックUIスレッドの問題が発生しました。

動画の切り替えのスクロールがスムーズではないので、私は私がreplaceCurrentItemWithPlayerItemがに30ミリ秒程度必要であることが分かった正確.IN Time Profiler UIスレッドを占めるものを分析するためにInstrumentsCore Animationを使用して、いくつかのメソッドブロックUI thread.Then を推測16ms(1000/60(fps))を超えるメインスレッドで実行すると、不安定なスクロールが発生します。

replaceCurrentItemWithPlayerItemをGCDを使ってバックグラウンドスレッドに入れてみましたが、うまくいきませんでした。それは、UIを意味するreplaceCurrentItemWithPlayerItemのコール時にCocoa自体がアップデートUIを必要としているかどうかわかりませんスレッドはまだブロックです。最後に、replaceCurrentItemWithPlayerItemをスクローリングエンド(デリゲートfunc scrollViewDidEndDecelerating(scrollView: UIScrollView))に置くことによって動作させました。スクロールがスムーズに行われました。

したがって、私のアドバイスは明白です:正確

+0

おかげでチームメイトUIスレッドを占めるものを分析するために楽器を使用して、あなたが私の一日保存された:D –

関連する問題