2010-09-17 18 views
5

Tôi có O hoạt động dài được gọi thông qua NSInvocationOperation, được lên lịch bằng cách thêm nó vào NSOperationQueue để nó chạy không đồng bộ. O hoạt động dài đó được gọi trong hai trường hợp khác nhau trong ứng dụng của tôi.Giảm tốc lớn bằng NSInvocationOperation (NSOperation) với NSOperationQueue trên iOS 4 (iPhone)

Trong trường hợp A, thao tác O được gọi là kết quả của việc khai thác một số tiện ích trong một số giao diện. Ngay sau khi widget được khai thác, O hoạt động trong một thời gian (tôi có thể thấy rằng nhờ vào UIActivityIndicator), nhưng nó không làm chậm hoặc chặn UI, vì vậy tôi có thể chạm vào các widget khác và thực hiện các hoạt động UI khác trong khi hoạt động O đang chạy.

Trong trường hợp B, thao tác O được gọi là kết quả của việc nhận thông báo cục bộ, trong phương thức didReceiveLocalNotification của đại biểu ứng dụng. Trong trường hợp này, các hoạt động giao diện người dùng được thực hiện ngay sau khi gọi hoạt động O, trong khi vẫn còn trong phương thức didReceiveLocalNotification, bị chậm lại đáng kể, về cơ bản là thu thập dữ liệu, gần như hoạt động O đã chiếm trên CPU.

Tại sao vậy, và cách nào đúng để gọi hoạt động O trong trường hợp B, do đó nó thực sự chạy đồng thời trong nền với mức ưu tiên thấp hơn, để phần còn lại của mã trong phương thức didReceiveLocalNotification chạy ở tốc độ bình thường?

LƯU Ý: Thao tác O mucks xung quanh với thông báo địa phương (loại bỏ những cái hiện có hoặc lên lịch mới) và lịch (truy vấn cửa hàng sự kiện để lên lịch thông báo cục bộ tốt hơn).

Trả lời

0

Bạn đã cố giảm mức độ ưu tiên của luồng chưa?

Điều này sẽ chỉ hoạt động trên iOS 4, nhưng bạn có thể gọi phương thức setThreadPriority trên NSInvocationOperation.

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