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
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
- 1. AVPlayer replaceCurrentItemWithPlayerItem nie działa na iOS 4.3.3+
- 2. Rxjava AndroidSchedulers.mainThread() oznacza wątek UI?
- 3. Zatrzymywanie AVPlayer na iOS
- 4. wyjątki jQuery bloku UI
- 5. iOS AVPlayer Play/Pause problem
- 6. iOS: Wstępne ładowanie wideo AVPlayer
- 7. iOS - AVPlayer używający zamkniętych komend
- 8. Problemy z odtwarzaniem muzyki w iOS AVPlayer
- 9. Tworzenie kontrole non-UI wątek
- 10. różnica składnia bloku powoduje „LocalJumpError: brak bloku podano (wydajność)”
- 11. Wysyłaj nagłówki z żądaniem AVPlayer w iOS
- 12. Jak ustawić bufor AVPlayer pusty w ios
- 13. iOS 7 AVPlayer AVPlayerItem trwania niepoprawny w iOS 7
- 14. UI Wątek .Invoke() powodujący wyciek rączki?
- 15. UI wątek zawiesza podczas tekstowym powołuje
- 16. Pracownik blokujący wątek UI w Chrome
- 17. Jak wykrywać wątek UI na Androidzie?
- 18. Wątek-lokalny magazyn i iOS
- 19. iOS AudioSessionSetActive() blokuje główny wątek?
- 20. iOS 7 - brak dostępnych urządzeń ios
- 21. AVPlayer nie przełącza się między progresywnym pobieraniem i przesyłaniem strumieniowym
- 22. iOS, NSURLConnection: Delegować oddzwonienia na inny wątek?
- 23. iOS bluetooth scanForPeripheralsWithServices Brak wyników
- 24. FMDB ios brak takiej tabeli
- 25. odtwarzanie AVPlayer nie jest aktywny podczas AVAssetExportSession jak iOS 10
- 26. Przeciek pamięci w iOS, AVPlayer nigdy nie jest wycofywany
- 27. Przewijanie UICollectionView blokuje główny wątek
- 28. Jak przekazywać dane z AsyncTask do Ui Wątek
- 29. Jak spać wątek w Androidzie Xamarin i ios?
- 30. Odtwórz wideo za pomocą AVPlayer
Thanks partnera, uratowałeś mój dzień: D –