2017-07-27 7 views
0

J'ai une minuterie dans l'application. Pour reproduire le problème, l'utilisateur doit démarrer cette minuterie, ensuite entrer l'application en arrière-plan ou éteindre l'écran. L'application fonctionne jusqu'à 5 minutes et ensuite tué par le système. Une fois que les utilisateurs ont rallumé l'écran, ils peuvent voir l'écran d'accueil. Et si pour recommencer l'application, elle commence au début, mais pas à l'endroit où se trouvait l'utilisateur avant d'éteindre l'écran.iOS 10.3.2 arrête le fond de l'application de travail après ~ 5min

J'essaie de résoudre ce problème avec la solution suivante dans mon AppDelegate:

- (void)methodToRepeatEveryOneSecond 
{ 
    if (self.flag) { 
    dispatch_queue_t q_background = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0); 
    double delayInSeconds = 1.0; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
    dispatch_after(popTime, q_background, ^(void){ 
    [self methodToRepeatEveryOneSecond]; 
    }); 
    } 
} 
-(void)applicationDidEnterBackground:(UIApplication *)application{ 
    NSUserDefaults* def = [[NSUserDefaults alloc] init]; 
    if ([[def valueForKey:@"status" ] boolValue]) { 
    self.flag = true; 
    dispatch_queue_t q_background = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0); 
    dispatch_async(q_background, ^{ 
     [self methodToRepeatEveryOneSecond]; 
    }); 
    } 
} 
-(void)applicationWillEnterForeground:(UIApplication *)application{ 
    self.flag = false; 
} 

Mais l'application arrête encore travailler après ~ 5 minutes en arrière-plan. Lorsque je teste cette solution à l'aide d'une application de câble USB, je travaille en arrière-plan jusqu'à 30 minutes, mais après environ 4 minutes de travail en arrière-plan, je peux voir les journaux suivants dans la console (ici une partie de celui-ci):

2017-07-26 17:43:14.496379+0300 MusicMonitor[486:339431] Can't endBackgroundTask: no background task exists with identifier 16df86530, or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug. 
2017-07-26 17:43:14.496493+0300 MusicMonitor[486:339431] Can't endBackgroundTask: no background task exists with identifier 16e1b6530, or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug. 
2017-07-26 17:43:14.496790+0300 MusicMonitor[486:339431] Can't endBackgroundTask: no background task exists with identifier 16e012530, or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug. 
2017-07-26 17:43:14.497065+0300 MusicMonitor[486:339431] Can't endBackgroundTask: no background task exists with identifier 16df86530, or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug. 
2017-07-26 17:43:14.497188+0300 MusicMonitor[486:339431] Can't endBackgroundTask: no background task exists with identifier 16e242530, or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug. 
2017-07-26 17:43:14.497476+0300 MusicMonitor[486:339431] Can't endBackgroundTask: no background task exists with identifier 16e242530, or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug. 

Mais si pour tester la même version avec l'aide de téléchargement à partir du TestFlight, je reçois le problème, que j'ai écrit ci-dessus (avec projection de l'écran d'accueil).

J'ai également essayé d'utiliser le support pour l'emplacement dans la clé UIBackgroundModes dans mon fichier Info.plist, cela a fonctionné correctement, mais la révision de l'application bêta a été rejetée avec un problème de «Guideline 2.5.4».

S'il vous plaît, donnez-moi des conseils, ce que je peux utiliser pour résoudre ce problème

+0

Quel est le but de votre application et quel mode d'arrière-plan avez-vous utilisé? –

+1

@mag_zbc App est pour les musiciens. Ils répètent sous la minuterie. Donc, j'ai besoin de lui pour travailler tout le temps, sauf s'ils vont l'éteindre (même lorsque l'écran est éteint ou l'application est en arrière-plan) Mode d'arrière-plan: récupération d'arrière-plan. J'ai également essayé d'utiliser la géolocalisation, et pour cela j'ai utilisé le mode d'arrière-plan de mise à jour de la position – Simon

Répondre

-1

lorsque l'application est en arrière-plan de votre application se termine 3 minutes d'inactivité et vous perdez tous vos previliges et votre application ne peux pas faire autre chose que écouter recevoir des notifications (si vous avez des notifications implémentées)

Si vous essayez de vous empêcher de terminer l'application, vous pouvez l'autoriser à lancer un mp3 silencieux dans cet environnement de manière à ce que votre application soit toujours active (la batterie épuisée sera rejetée).

Mais si l'utilisateur appuie deux fois sur le bouton d'accueil et fait glisser votre application vers le haut (la termine). Il n'y a rien que tu puisses faire!

Espérons que cela aide!