これは非常に一般的な質問です。多くの回答を読みましたが、適切な回答が見つかりませんでした。そのため、この質問を投稿し、誰かが私のコードを修正する方法を教えてくれることを願っています.
CLLocationManagerを使用して場所を更新する関数startUpdateがあります。applicationDidEnterBackground メソッドでは、以下のように記述します。
[自己開始更新]; // position1 NSLog(@"applicationDidEnterBackground"); __block UIBackgroundTaskIdentifier bgTask; bgTask = [アプリケーション beginBackgroundTaskWithExpirationHandler:^{ [アプリケーション endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid; }];
[自己開始更新]; // position2 // 長時間実行タスクを開始し、すぐに戻ります。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [self startUpdate]; // position3 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@" http://google.com "]]; });
[self startUpdate] を 3 つの位置 (position1、2、3) のいずれかに配置しようとしましたが、機能する場合と機能しない場合があり、理由がわかりません。
動作する場合、更新は 3 分間のイベントで実行されます。アプリがフォアグラウンドにあるときにstartUpdateを呼び出してからアプリをバックグラウンドにすると、更新は実際のデバイスで15分、シミュレーターで1時間以上続きます(正確にはわかりませんが、1時間後、永遠に続くと思っていました)テストをやめる)。では、フォアグラウンドでの startupdate-> バックグラウンドへの移動とバックグラウンドでの startupdate の違いは何ですか。シミュレータ対実際のデバイス?
position3 の直後に、次の行を呼び出してサファリ [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@" http://google.com "]];を開きます。しかし、うまくいきません。では、ここでバックグラウンドで実行できるタスクの種類は何ですか?
サービスを永久に実行し続ける必要があります。一部の検索結果では、それは不可能だと言われています。しかし、一部の使い慣れたアプリはそれを行いました (Facebook など、通知を受信するサービスを維持します)。彼らはどのようにそれを行うことができますか?
どうもありがとう、