36

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{

}

マイナス記号を押してバックグラウンドで実行されているアプリを削除しようとしましたが、それでもデリゲートメソッドは呼び出されませんでした。

何か案は ???

4

4 に答える 4

52

iPhone アプリケーション プログラミング ガイドから:

iPhone SDK 4 以降を使用してアプリケーションを開発した場合でも、アプリケーションの終了に備える必要があります。メモリが不足すると、システムはメモリからアプリケーションを削除して空き容量を増やすことがあります。アプリケーションが現在中断されている場合、システムは予告なしにアプリケーションをメモリから削除します。ただし、アプリケーションが現在バックグラウンドで実行されている場合、システムはapplicationWillTerminate:アプリケーション デリゲートのメソッドを呼び出します。アプリケーションは、このメソッドから追加のバックグラウンド実行時間を要求できません。

したがってapplicationWillTerminate:、iOS 4 では通常、あまり頻繁に呼び出されることはありません。データを保存する必要がある場合は、 と の両方で行う必要がapplicationWillTerminate:ありapplicationDidEnterBackground:ます。

于 2010-06-29T10:06:07.367 に答える
4

iPhoneOSでマルチタスクを採用するWWDC2010セッション (パート2)は、アプリケーションの状態遷移を非常によく説明しています。

于 2010-06-29T14:25:17.423 に答える
2

ユーザーがiOS4のホームボタンを押したときにアプリを終了するための1つの解決策があります。これにより、バックグラウンドプロセスに入る代わりに、applicationWillTerminateデリゲートメソッドが呼び出されます。

  1. info.plistファイルを開きます
  2. キーUIApplicationExitsOnSuspendを追加します
  3. 新しいキーをYESに設定します
于 2010-07-03T18:09:38.520 に答える
1

実際には、この手順を使用してそうすることもできます。

  1. info.plist ファイルを開きます
  2. キーを追加 -> アプリケーションがバックグラウンドで実行されない
  3. このキー値を YES に設定します
于 2011-04-28T17:32:20.170 に答える