2015-12-03 15 views
6

Có vẻ như api replaceCurrentItemWithPlayerItem: sẽ kẹt chuỗi chính trong vài giây, tôi hiểu rằng việc thay thế mục cần thông tin của mục mới có thể mất một chút thời gian để tải trước. Nhưng câu hỏi đặt ra rằng tại sao replaceCurrentItemWithPlayerItem: với một đối tượng mục nil nil cũng sẽ bị mắc kẹt chủ đề chính ?? Nó xảy ra với tôi rằng đôi khi phải mất hơn 5 giây để thay thế một playerItem nil. Tôi tự hỏi tôi có thể làm gì để tránh vấn đề này. Cảm ơn mọi lời khuyên!iOS AVPlayer replaceCurrentItemWithPlayerItem: nil block UI Chủ đề

Trả lời

1

Tôi gặp phải vấn đề về chuỗi giao diện người dùng chặn tương tự khi tôi sử dụng UICollectionView để hiển thị và xem trước video trong thư viện ảnh địa phương qua ALAssetLibrary.

Các cuộn trên video chuyển đổi không phải là suôn sẻ, vì vậy tôi đoán một số phương pháp khối UI thread.Then tôi sử dụng Core Animation của Instruments để phân tích chính xác những gì chiếm thread UI .Tại Time Profiler tôi phát hiện ra rằng replaceCurrentItemWithPlayerItem cần khoảng 30ms đến thực thi trong chuỗi chính, lớn hơn 16ms (1000/60 (fps)) dẫn đến việc cuộn cuộn.

Để giải quyết vấn đề, trước tiên tôi đã thử đặt replaceCurrentItemWithPlayerItem vào chủ đề nền bằng GCD, nhưng không hoạt động. Tôi không chắc là vì bản thân Cocoa cần cập nhật giao diện người dùng khi gọi replaceCurrentItemWithPlayerItem, có nghĩa là giao diện người dùng thread vẫn block.Finally tôi làm cho nó hoạt động bằng cách đặt replaceCurrentItemWithPlayerItem ở cuối cuộn (các đại biểu func scrollViewDidEndDecelerating(scrollView: UIScrollView)) .Làm thế nào để di chuyển được suôn sẻ, yep!

Vì vậy, lời khuyên của tôi là rõ ràng: Sử dụng dụng cụ để phân tích chính xác những gì chiếm thread UI

+0

Thanks mate, bạn đã lưu trong ngày của tôi: D –

Các vấn đề liên quan