2012-11-28 12 views
8

Ho un'applicazione in cui devo caricare video di grandi dimensioni su Amazon s3 bucket. Sto usando NSOperations regolato da un NSOperationQueue per eseguire attività concorrenti.Estensione del periodo di timeout dell'attività durante il caricamento di video di grandi dimensioni iOS

Non ho problemi durante il caricamento di piccoli video (inferiore a 200 Mb). Ma il problema è quando provo a caricare un video di grandi dimensioni, dopo 10 minuti il ​​processo di caricamento viene interrotto.

Sto già utilizzando beginBackgroundTaskWithExpirationHandler:^ per ottenere una finestra di 10 minuti. Qual è il modo corretto con cui posso estendere questo periodo di timeout?

Apple rifiuterà l'app se in qualche modo riesco ad estendere questo timeout?

Attualmente ho il seguente codice nel mio AppDelegate che ho costruito facendo riferimento al link 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]; 
} 

Con questo pezzo di codice che vedo che il compito di sfondo viene mai interrotto. Come puoi vedere all'interno del gestore di scadenza, ho avviato un altro evento di attività in background che conduce a un'attività in esecuzione infinita. Anche se posso scrivere la logica per terminare l'attività in background una volta che il caricamento è terminato, ma ho dei dubbi su questo approccio ..

Cosa ne pensate?

È un hack con qualsiasi mezzo? Apple rifiuterà l'app per il seguente approccio?

+0

bgTask = [app beginBackgroundTaskWithExpirationHandler:^(void) { [self.queue waitUntilAllOperationsAreFinished]; [app endBackgroundTask: bgTask]; bgTask = UIBackgroundTaskInvalid; }]; Che ne pensi di questo ragazzi ?? – Xcoder

+0

Voi ragazzi non avete il diritto di discutere con risposte stupide e commenti stupidi. Onestamente questo è un argomento su cui discutere. Per favore ragazzi, vorrei chiedervi una discussione aperta, in modo da poter osservare i dettagli di tutto. Grazie –

+0

posso usare NSOperationQueue per caricare grandi video in background, apple rifiuterà la mia app ?? –

risposta

2

L'idea dietro le attività in background è di impedire alle applicazioni di funzionare continuamente in background. In altre parole, se si tenta di aggirare le restrizioni che Apple ha messo in atto, allora hanno motivo di respingere la domanda.

La domanda se faranno questo può essere risolta solo da Apple. Tuttavia, come menzionato Daij-Djan, ci sono altre situazioni in cui la tua applicazione può essere uccisa.

Alcuni mesi fa, ho affrontato una situazione simile, cioè un'applicazione doveva caricare file di grandi dimensioni su un bucket S3. La soluzione utilizza caricamenti multipart per assicurarsi che il processo di caricamento riprenda quando l'applicazione diventa attiva. Puoi leggere ulteriori informazioni sui caricamenti multipart in the API reference.

+0

penso che l'idea sia chiara. Non spingere troppo il sistema. – Xcoder

2

sembra hackisch ma non male IMHO (il contrario): D

Se Apple lascia andare attraverso, sei d'oro, ma in realtà si stanno abusando compiti bg

BTW: anche con quello , ios potrebbe solo cancellarti! + Non fare lavoro intensivo di CPU/memoria in quanto influirà sulle prestazioni di altre app forse

+0

Hai ragione fratello. –

Problemi correlati