私はアプリにタイマーを持っています。問題を再現するには、このタイマーを起動してから、アプリをバックグラウンドに設定するか、画面をオフにする必要があります。アプリは最大5分で動作し、システムによって殺されます。ユーザーが画面をオンに戻すと、ホーム画面が表示されます。また、アプリをもう一度起動すると、最初から画面が表示されますが、画面が表示されない場所からは表示されません。iOS 10.3.2は〜5分後にアプリのバックグラウンドを停止します
私は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;
}
しかし、アプリがバックグラウンドで〜の5分後に動作を停止します。
私はUSBケーブルアプリの助けを借りてこのソリューションをテストしていますが、doはバックグラウンドで30分まで機能しますが、バックグラウンドで作業してから約4分後にコンソールに次のログが表示されますその一部):
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.
しかしtestflightからのダウンロードの助けを借りて、同じビルドをテストする場合は、私は()、ホーム画面の上映と上記に書いたことを、問題を取得します。
また、Info.plistファイルのUIBackgroundModesキーの場所のサポートを使用しましたが、正しく機能しましたが、ベータ版のアプリレビューは«ガイドライン2.5.4»の問題で却下されました。
してください、私がこの問題を解決するために使用することができますどのようなアドバイス、
アプリの目的は何ですか?どのバックグラウンドモードを使用しましたか? –
@mag_zbcアプリはミュージシャン向けです。彼らはタイマーの下でリハーサルをする。だから、オフにしない限り(画面がオフになっていたり、アプリがバックグラウンドになっていても)、常時動作する必要があります。 バックグラウンドモード:バックグラウンドフェッチ。 また、ジオロケーションを使用しようとしました。そのために、私はロケーションアップデートバックグラウンドモードを使用しました – Simon