2015-12-03 12 views
6

Sembra che api replaceCurrentItemWithPlayerItem: rimarrà il thread principale per alcuni secondi, ho capito che la sostituzione dell'elemento richiede le informazioni del nuovo elemento che potrebbero richiedere del tempo per il precaricamento. Ma le domande sono arrivate così perché replaceCurrentItemWithPlayerItem: con un oggetto nil si sarebbe bloccato anche il thread principale ?? A me capita che a volte ci vogliono più di 5 secondi per sostituire un player nullo. Mi chiedo che cosa posso fare per evitare il problema. Grazie per qualsiasi consiglio!iOS AVPlayer replaceCurrentItemWithPlayerItem: nil block UI Thread

risposta

1

Mi sono imbattuto in un problema simile di thread dell'interfaccia utente di blocco quando ho utilizzato UICollectionView per visualizzare e visualizzare l'anteprima del video nella libreria di foto locali tramite ALAssetLibrary.

Il rotolo sul video di commutazione non è senza problemi, quindi credo che un po 'di UI metodo blocco thread.Then io uso Core Animation di Instruments per analizzare che cosa esattamente occupare il thread UI .In Time Profiler ho scoperto che replaceCurrentItemWithPlayerItem bisogno di circa 30ms per esegui nel thread principale, che è più di 16ms (1000/60 (fps)) con uno scrolling continuo.

Per risolvere il problema, prima ho provato a inserire replaceCurrentItemWithPlayerItem nella discussione in background utilizzando GCD, ma non funziona. Non sono sicuro se è perché il Cocoa stesso ha bisogno dell'interfaccia utente di aggiornamento quando si chiama replaceCurrentItemWithPlayerItem, che significa l'interfaccia utente thread è ancora bloccato.Infine ho fatto funzionare mettendo replaceCurrentItemWithPlayerItem alla fine a scorrimento (il delegato func scrollViewDidEndDecelerating(scrollView: UIScrollView)). Ora lo scorrimento è uniformemente, sì!

Pertanto, il mio consiglio è evidente: l'utilizzo di strumenti per analizzare che cosa esattamente occupare il thread UI

+0

Grazie amico, mi hai salvato la giornata: D –