web-dev-qa-db-ja.com

バックグラウンドでタスクを実行するiOSアプリケーション

私のアプリケーションがバックグラウンドにある間に、いくつかのWebサービス呼び出しを送信できるかどうか疑問に思っていました。スカイプはどのようにそれをしますか?ホームボタンを押しても、通話は接続されたままです。

25
Qamar Suleiman

Rckoenesの説明に基づいて、アプリケーションは、ユーザーがホームボタンを押した後に完了するバックグラウンドタスクを登録できます。これらのタスクを完了するには、10または15分の時間制限があります。繰り返しますが、ユーザーが家に着いた後すぐに完了するタスクを登録できます。これにより、アプリを終了してから1時間後にコードを実行することはできません。

UIApplication*    app = [UIApplication sharedApplication];
task = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:task];
        task = UIBackgroundTaskInvalid;
    }];
// Start the long-running task and return immediately.
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        // Do the work associated with the task.
        NSLog(@"Started background task timeremaining = %f", [app backgroundTimeRemaining]);
        if (connectedToNetwork) {
            // do work son...
        }

        [app endBackgroundTask:task];
        task = UIBackgroundTaskInvalid;
    });

更新:アプリがiOs 4より前のバージョンのiOSをサポートしている場合、バックグラウンドタスクを登録する前にマルチタスクがサポートされていることを確認する必要もあります。以下のラインに沿って何かを使用します。

UIDevice* device = [UIDevice currentDevice];

BOOL backgroundSupported = NO;

if ([device respondsToSelector:@selector(isMultitaskingSupported)])

   backgroundSupported = device.multitaskingSupported;
34
Nathan Jones

これを試してください...時間制限なしでバックグラウンドでアプリを実行するための優れたコード。 (Webサービスから600 MB以上のデータをダウンロードするためにテストしました。)

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    UIApplication *app = [UIApplication sharedApplication];
    UIBackgroundTaskIdentifier bgTask;
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
        [app endBackgroundTask:bgTask]; 
    }];
 }

更新::

このApple doc Background Execution でマルチタスクに関する詳細情報を見つけることができます。

デバイスでテストしてください。

30
Gagan_iOS

それは、コーディングしようとしているアプリケーションの種類によって異なります。 SkypeはVoIP(長時間実行アプリ)アプリとして登録されているため、バックグラウンドでも「実行中」のままでいることができます。

Appleはアプリを3つに分けています。

  • 有限長タスクの実行(有限時間タスクを実行できます)
  • バックグラウンドでコンテンツをダウンロードする(アプリが再びアクティブになったときにコンテンツをダウンロードしてユーザーに提示できます)
  • 長時間実行タスクの実装(これは最も興味深いバックグラウンドアプリのカテゴリであり、開発者がアプリ用に定義する必要があるサブカテゴリがいくつかあります)

    • 音楽プレーヤーアプリなど、バックグラウンドでユーザーに音声コンテンツを再生するアプリ
    • バックグラウンドでオーディオコンテンツを記録するアプリ
    • ナビゲーションアプリなど、ユーザーに常に現在地を通知するアプリ
    • Voice over Internet Protocol(VoIP)をサポートするアプリ(SKYPEはこちら)
    • 新しいコンテンツを定期的にダウンロードして処理する必要があるアプリ
    • 外部アクセサリから定期的に更新を受け取るアプリ

そのため、アプリのカテゴリとサービス操作の実行内容を評価する必要があります。たぶん、サービスに小さなものを送信する場合、最善のアプローチは、ジョブを実行するためにバックグラウンドで余分な時間を要求することだけです。

このすべての詳細については、次のリンクを参照してください。

https://developer.Apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

2
halbano