2015-12-03 19 views
6

Wygląda na to, że api replaceCurrentItemWithPlayerItem: utknie główny wątek na kilka sekund, rozumiem, że wymiana przedmiotu wymaga informacji o nowym elemencie, co może trochę potrwać, zanim zostanie załadowany. Ale pojawiają się pytania, które powodują, że replaceCurrentItemWithPlayerItem: z obiektem zerowy przedmiot pozycjiutknąłoby główny wątek ?? Zdarza mi się, że czasami potrzeba więcej niż 5 sekund, aby zastąpić zero playerItem. Zastanawiam się, co mogę zrobić, aby uniknąć problemu. Dzięki za porady!iOS AVPlayer replaceCurrentItemWithPlayerItem: brak bloku UI Wątek

Odpowiedz

1

Podczas korzystania z UICollectionView natrafiłem na podobny problem z wątkiem UI blokującym, aby wyświetlić i wyświetlić podgląd wideo w lokalnej bibliotece zdjęć przez ALAssetLibrary.

Zwój na filmy przełączania nie jest płynnie, więc myślę, że niektóre metody bloku UI thread.Then używam Core Animation z Instruments przeanalizować co dokładnie zajmują wątku UI .in Time Profiler I okazało się, że potrzeba około 30ms replaceCurrentItemWithPlayerItem do wykonanie w głównym wątku, który jest dłuższy niż 16 ms (1000/60 (fps)) powoduje przerywane przewijanie.

Aby rozwiązać problem, najpierw próbowałem umieścić replaceCurrentItemWithPlayerItem w wątku w tle używając GCD, ale to nie działa. Nie jestem pewien, czy to dlatego, że samo kakao potrzebuje aktualizacji UI, gdy zadzwoni replaceCurrentItemWithPlayerItem, co oznacza interfejs użytkownika Wątek nadal blokuje. W końcu zrobiłem to, umieszczając replaceCurrentItemWithPlayerItem na przewijanym końcu (delegat func scrollViewDidEndDecelerating(scrollView: UIScrollView)). Teraz przewijanie jest płynne, tak!

Dlatego moja rada jest oczywista: pomocą instrumentów do analizy, co dokładnie zajmują wątku UI

+0

Thanks partnera, uratowałeś mój dzień: D –

Powiązane problemy