0

これは非常に一般的な質問です。多くの回答を読みましたが、適切な回答が見つかりませんでした。そのため、この質問を投稿し、誰かが私のコードを修正する方法を教えてくれることを願っています.

  1. 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 "]];を開きます。しかし、うまくいきません。では、ここでバックグラウンドで実行できるタスクの種類は何ですか?

  2. サービスを永久に実行し続ける必要があります。一部の検索結果では、それは不可能だと言われています。しかし、一部の使い慣れたアプリはそれを行いました (Facebook など、通知を受信するサービスを維持します)。彼らはどのようにそれを行うことができますか?

どうもありがとう、

4

1 に答える 1