2011-02-01 8 views
1

Appleのアプリケーションライフサイクルについてdocumentationを読んで、さまざまなデバイスでのアプリケーションのライフサイクルを把握するためのテストを行いました。 (すべての2G以外のiOS 4.xを実行している)iOSアプリライフサイクル4/3GS/iPad vs 2G/3G

私はこの機能をサポートしていませんので、いくつかの対 "マルチタスキング" 対応デバイステストしてみた:

iPhone 2G/3Gアプリのライフサイクル:

(START) 
- didFinishLunchingWithOptions 
- applicationDidBecomeActive 

(HOME PRESSED) 
- applicationDidEnterBackground 
- appWillTerminate 

のiPad/iPhone 4アプリのライフサイクル:

(START) 
- didFinishLunchingWithOptions 
- applicationDidBecomeActive 

(HOME PRESSED) 
- appWillResignActive 
- appDidEnterBackGround 

(RESART app in the "Taskbar") 
- appWillEnterForeGround 
- appDidBecomeActive 

私は「タスクバー」からアプリケーションを殺すためにしようとしましたが、デバッガはSIGKILLを受けました!あなたが殺すとそのようにアプリを実行するとどうなりますか?

「マルチタスク」対応デバイスではいつappWillTerminateが呼び出されますか?私の結果は正しいですか?

EDIT:appWillTerminateに関するAppleのドキュメントから

引用:アプリケーションは、単にバックグラウンドに移動するため、ユーザーがアプリケーションを終了するときにバックグラウンド実行をサポートするアプリケーションの場合

、このメソッドは、一般的に呼ばれていませんその場合は。ただし、このメソッドは、アプリケーションがバックグラウンドで実行されていて(中断されていない)、システムが何らかの理由で終了する必要がある状況で呼び出されることがあります。

「一般的には呼び出されない」とはどういう意味ですか? "システムはそれを終了する必要があります.."は、方法appWillTerminateが呼び出されることを意味しますか?

答えて

1

あなたは正しいと思います。あなたがタスクバーから(またはあなたのデバイスがメモリ不足でOSがあなたのためにアプリを殺す)アプリケーションを終了すると、SIGKILシグナルが送信されます。あなたが注意しているように、コールバックのどれもコールしません。

According to the documentation: バックグラウンド実行をサポートするアプリケーションの場合

アプリケーションは、単にその場合 背景に移動するため、ユーザー がアプリケーションを終了するとき、この方法は、 一般に呼ばれません。しかし、この メソッドは、アプリケーションが のバックグラウンド(サスペンドされていない)で実行され、 システムが一部の 理由でそれを終了する必要がある状況 で呼び出すことができます。

だから、iOSの applicationWillTerminate:メソッドを呼び出すことができますが、おそらくないでしょう。 (私はそれを見たことがない)

あなたのアプリが殺される前に状態を保存したい場合は、バックグラウンドに行くようにする必要があります。

+0

これはほとんどの質問にお答えいただきありがとうございます。しかし、いつappWillTerminateが "マルチタスク"対応デバイス上で呼び出されますか? – Kami

+0

マニュアルから引用して更新しました。 –

+0

ああ私はその間に同じことをしました:D – Kami

関連する問題