2

バックグラウンドモードに入った後、いくつかのタスクを実行しています。これらのタスクは、バックグラウンドモードの場合にのみ実行したいので、次のようにしました。

if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground)

ただし、applicationStateはiOS4.0以降でのみ使用できます...

たとえば、このコードはiOS3でどのように機能するのでしょうか。

  • デバイスにiOS4が搭載されているかどうかを確認するにはどうすればよいですか?
  • iOS <4のクラッシュと例外を回避するにはどうすればよいですか?

あなたの助けに感謝します

ケロー

4

2 に答える 2

9

を使用して、現在の iOS が現在のアプリケーションの状態を返すことをサポートしているかどうかを確認できます。-respondsToSelector:

if ([[UIApplication sharedApplication] respondsToSelector:@selector(applicationState)] ){
  UIApplicationState state = [[UIApplication sharedApplication] applicationState];
}

バックグラウンド サポートを具体的にチェックすることで、マルチタスク サポートが利用可能かどうかを判断できます (iOS 4 以降を実行しているデバイスでも、マルチタスクをサポートするハードウェアがない場合があります)。

UIDevice* device = [UIDevice currentDevice];
BOOL backgroundSupported = NO;
if ([device respondsToSelector:@selector(isMultitaskingSupported)])
   backgroundSupported = device.multitaskingSupported;

次のコードを使用して iOS バージョンを取得できます (ただし、バックグラウンド サポートを推測するために次のコードに依存するべきではありません)。

float osVersion=[[[UIDevice currentDevice] systemVersion] floatValue];

最後に、バックグラウンド モードに入った直後にいくつかのタスクを実行する場合は、次のイベントを利用する必要があります。

- (void)applicationDidEnterBackground:(UIApplication *)application

..しかし、あなたの時間は非常に限られていることに注意してください。やりたいことをするのに約5秒かかります。さらに時間が必要な場合は、iOS に追加の時間を求めることができます。

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    UIApplication*    app = [UIApplication sharedApplication];

    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:bgTask];
        bgTask = 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.

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

この場合、iOS によってより多くの時間が許可される (または許可されない) 可能性がありますが、それはまだ有限の長さの時間であることに注意してください。

Apple のExecuting Code in the Backgroundは読む価値があります。

于 2011-05-03T12:31:05.583 に答える
0

私はこのリンクが3.1と>4.0の両方のOSバージョンを処理する方法を理解するのに非常に役立つことを発見しました:

iOS4 SDKを使用したiPhoneアプリの開発、3.xデバイスへのデプロイ:ベースSDKおよびiPhoneOSデプロイメントターゲット

于 2011-05-13T12:42:41.233 に答える