2012-11-28 37 views
8

Tôi có một ứng dụng mà tôi phải tải lên các video lớn lên nhóm s3 Amazon. Tôi đang sử dụng NSOperations được quy định bởi một NSOperationQueue để chạy các tác vụ đồng thời.Mở rộng thời gian chờ của Nhiệm vụ nền trong khi tải lên Video lớn iOS

Tôi không gặp sự cố khi tải lên các video nhỏ (nhỏ hơn 200 Mb). Nhưng vấn đề là khi tôi cố tải lên một video lớn, sau 10 phút thì quá trình tải lên bị gián đoạn.

Tôi đã sử dụng beginBackgroundTaskWithExpirationHandler:^ để có cửa sổ 10 phút. Cách thích hợp để tôi có thể kéo dài khoảng thời gian chờ này là gì?

Apple sẽ từ chối ứng dụng nếu tôi bằng cách nào đó quản lý để mở rộng thời gian chờ này?

Hiện nay tôi có đoạn mã sau vào AppDelegate của tôi mà tôi đã xây dựng đề cập đến liên kết iPhone - Backgrounding to poll for events

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 

    UIApplication* app = [UIApplication sharedApplication]; 
    dispatch_block_t expirationHandler; 

    expirationHandler = ^{ 
     bgTask = [app beginBackgroundTaskWithExpirationHandler:expirationHandler]; 
    }; 

    bgTask = [app beginBackgroundTaskWithExpirationHandler:expirationHandler]; 
} 

Với đoạn mã này tôi thấy rằng nhiệm vụ nền được không bao giờ bị gián đoạn. Như bạn có thể thấy bên trong trình xử lý hết hạn, tôi đã khởi tạo một sự kiện tác vụ nền khác dẫn đến một nhiệm vụ chạy vô hạn. Mặc dù, tôi có thể viết logic để kết thúc tác vụ nền sau khi quá trình tải lên của tôi kết thúc, nhưng tôi có nghi ngờ về cách tiếp cận này.

Các bạn nghĩ sao?

Đây có phải là hack bằng bất kỳ phương tiện nào không? Liệu Apple có từ chối ứng dụng cho cách tiếp cận sau đây không?

+0

bgTask = [ứng dụng startBackgroundTaskWithExpirationHandler:^(void) { [self.queue waitUntilAllOperationsAreFinished]; [ứng dụng endBackgroundTask: bgTask]; bgTask = UIBackgroundTaskInvalid; }]; Còn anh chàng này thì sao ?? – Xcoder

+0

Các bạn không có quyền tranh luận với câu trả lời ngu ngốc và bình luận ngu ngốc. Thành thật mà nói, đây là một chủ đề để tranh luận về. Xin các bạn, tôi sẽ yêu cầu các bạn thảo luận mở, để chúng ta có thể chú ý đến mọi chi tiết của mọi thứ. Cảm ơn –

+0

tôi có thể sử dụng NSOperationQueue để tải lên video lớn trong nền, táo sẽ từ chối ứng dụng của tôi ?? –

Trả lời

2

Ý tưởng đằng sau tác vụ nền là ngăn ứng dụng chạy liên tục trong nền. Nói cách khác, nếu bạn cố gắng vượt qua những hạn chế mà Apple đã đưa vào vị trí thì họ có căn cứ để từ chối ứng dụng của bạn.

Câu hỏi liệu họ có thực hiện việc này chỉ có thể được Apple trả lời hay không. Tuy nhiên, như Daij-Djan đề cập, có những tình huống khác mà ứng dụng của bạn có thể bị giết.

Một vài tháng trước, tôi đã đối mặt với một tình huống tương tự, tức là, một ứng dụng phải tải các tệp lớn lên một thùng S3. Giải pháp là sử dụng tải lên nhiều phần để đảm bảo rằng quá trình tải lên được tiếp tục bất cứ khi nào ứng dụng của bạn hoạt động. Bạn có thể đọc thêm về tải lên nhiều phần in the API reference.

+0

Tôi nghĩ rằng ý tưởng là rõ ràng. Không đẩy hệ thống quá nhiều. – Xcoder

2

có vẻ như hackisch nhưng không xấu IMHO (ngược lại): D

nếu táo cho phép nó đi qua, bạn nhiệm vụ bg vàng nhưng trên thực tế bạn đang lạm dụng

BTW: ngay cả với điều đó , ios CÓ THỂ chỉ hủy bạn! + không thực hiện công việc chuyên sâu của CPU/bộ nhớ vì nó sẽ ảnh hưởng đến hiệu suất của các ứng dụng khác có thể là

+0

Bạn là người anh em đúng. –

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