8

iPhone SDK 4 を入手したばかりで、以前取り組んでいたアプリの開発をやめようとしています。だから私は両方を実装 -(void)applicationDidEnterBackground:(UIApplication *)application しました- (void)applicationWillTerminate:(UIApplication *)application

シミュレータ 4.0 でホーム ボタンをクリックすると、問題なく動作するようです。アプリが呼び出さ -(void)applicationDidEnterBackground:(UIApplication *)applicationれ、バックグラウンド状態に入ります。

ただし、ホーム ボタンをダブルクリックして、バックグラウンドで実行されているアプリを表示し、押したままにしてマイナス記号を表示または終了します。マイナス記号をクリックすると、デバッガーは次のように言います

プログラムが受信したシグナル: "SIGKILL"

さらに、- (void)applicationWillTerminate:(UIApplication *)application呼び出されることはありません。これを OS4 で動作させるために必要なことはありますか? または、少なくとも誰かが SIGKILL をデバッグする方法を教えてくれませんか。ありがとう。

4

2 に答える 2

13

-applicationWillTerminate:終了するように求められたときにアプリケーションが実行中の状態にある場合にのみ呼び出されます。すでにサスペンド状態にある場合 (ここにあるように)、システムは単純にアプリケーションに kill シグナルを送信します。これは、ユーザーが赤いマイナス ボタンを押してアプリを手動で終了した場合や、フォアグラウンド アプリケーション用にメモリを解放するためにシステムがアプリを破棄することを決定した場合に発生します。

アプリケーションがバックグラウンドで実行されている場合 (音楽の再生やバックグラウンド タスクの実行など)、ユーザーがマイナス ボタンを押してアプリケーションを手動で終了した場合にのみ、実際に-applicationWillTerminate:メッセージが表示されます。したがって、すべての状態などを保存する必要があります。から戻る前に-applicationDidEnterBackground:

于 2010-06-23T03:33:24.990 に答える
2

これは、マルチタスキング バーの「赤い閉じるボタン」が、Mac OS X でアプリケーションを強制終了するのと同じであることが予想されます。これは文書化された動作です。Apple は、iOS 4 の通常のユーザーが、プロセスの終了などについて考える必要のないアプリを単に起動/使用/終了することを期待しています。システムがそれを管理します。

重要なデータを application:willResignActive: または applicationWillEnterBackground に必ず保存してください。その後、メモリ不足でシステムが強制的にクリーンアップされると、強制終了される可能性があるため... Snow Leopard は、Info.plist で NSSupportsSuddenTermination キーを使用するアプリに同様の動作を導入しました。アプリは基本的に、データを少しずつ定期的に保存することをシステムに伝えます。これにより、アプリがバックグラウンドに移行したときに何もする必要がなくなるか、ほとんど実行されなくなります。大きなモノリシック アプリのデスクトップ アプリとは異なり...

于 2010-06-23T22:24:58.580 に答える