IOS 4.0でapplicationWillTerminateデリゲートメソッドが呼び出されないホームボタンを押すと、applicationWillResignActiveおよびapplicationDidEnterBackgroundデリゲートメソッドが呼び出されるのがわかります。
- (void)applicationWillResignActive:(UIApplication *)application
{
NSLog(@"Application Did Resign Active");
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSLog(@"Application Did Enter Background");
}
ホームボタンをダブルタップしてアプリケーションを再度起動すると、applicationWillEnterForegroundおよびapplicationDidBecomeActiveデリゲートメソッドが呼び出されていることがわかります。
- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSLog(@"Application Will Enter Foreground");
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSLog(@"Application Did Become Active");
}
しかし、applicationWillTerminateデリゲートメソッドがいつ呼び出され、DB /ファイルバックアップルーチンを実行するかを知りたいのです。
- (void)applicationWillTerminate:(UIApplication *)application{
}
マイナス記号を押してバックグラウンドで実行されているアプリを削除することもできましたが、それでもデリゲートメソッドは呼び出されませんでした。
何か案は ???
IPhoneアプリケーションプログラミングガイドから:
IPhone SDK 4以降を使用してアプリケーションを開発する場合でも、アプリケーションを終了する準備をする必要があります。メモリが制限されると、システムはより多くのスペースを作るためにメモリからアプリケーションを削除する場合があります。アプリケーションが現在中断されている場合、システムは通知なしにアプリケーションをメモリから削除します。ただし、アプリケーションが現在バックグラウンドで実行されている場合、システムはアプリケーションデリゲートの
applicationWillTerminate:
メソッドを呼び出します。アプリケーションは、このメソッドから追加のバックグラウンド実行時間を要求できません。
そのため、はい。通常、iOS 4ではapplicationWillTerminate:
はあまり呼び出されません。データを保存する必要がある場合は、applicationWillTerminate:
とapplicationDidEnterBackground:
の両方で行う必要があります。
WWDC 2010セッション iPhone OSでのマルチタスクの採用 ( パート2 )は、アプリケーションの状態遷移を非常によく説明しています。
ユーザーがiOS4でホームボタンを押したときにアプリを終了するための1つの解決策を得ました。これにより、バックグラウンドプロセスに入る代わりに、applicationWillTerminateデリゲートメソッドが呼び出されます。
実際には、この手順を使用して行うこともできます。