私のアプリケーションがバックグラウンドにある間に、いくつかのWebサービス呼び出しを送信できるかどうか疑問に思っていました。スカイプはどのようにそれをしますか?ホームボタンを押しても、通話は接続されたままです。
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;
これを試してください...時間制限なしでバックグラウンドでアプリを実行するための優れたコード。 (Webサービスから600 MB以上のデータをダウンロードするためにテストしました。)
- (void)applicationDidEnterBackground:(UIApplication *)application
{
UIApplication *app = [UIApplication sharedApplication];
UIBackgroundTaskIdentifier bgTask;
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
}];
}
更新::
このApple doc Background Execution。 でマルチタスクに関する詳細情報を見つけることができます。
デバイスでテストしてください。
それは、コーディングしようとしているアプリケーションの種類によって異なります。 SkypeはVoIP(長時間実行アプリ)アプリとして登録されているため、バックグラウンドでも「実行中」のままでいることができます。
Appleはアプリを3つに分けています。
長時間実行タスクの実装(これは最も興味深いバックグラウンドアプリのカテゴリであり、開発者がアプリ用に定義する必要があるサブカテゴリがいくつかあります)
そのため、アプリのカテゴリとサービス操作の実行内容を評価する必要があります。たぶん、サービスに小さなものを送信する場合、最善のアプローチは、ジョブを実行するためにバックグラウンドで余分な時間を要求することだけです。
このすべての詳細については、次のリンクを参照してください。