2016-11-24 6 views
2

私のアプリはバックグラウンドで実行されますが、私が再び開いた場合は、同じページが表示されます。Suspended状態に入った後にAppDelegateのどのメソッドが呼び出されますか?

一方、iOSがアプリをSuspended状態にしても、それはまだメモリに入っています。私が戻ってくると、どのAppDelegateメソッドが呼び出されます。

実際に私の目的は、停止されていない場合は、一時停止からアプリに同じ画面を復元することです。

最後に、Appが強制終了状態から復帰した場合、最後に、FinishedLaunchWithOptionsが呼び出されます。

おかげ..

+1

この場合、iOSの[保存と復元の状態](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/PreservingandRestoringState.html)機能を使用する方がよいと思います。 – dive

+0

Appが強制終了されて起動された場合、復元されたViewControllerに移動するか、最初から起動しますか? @dive –

答えて

3

Apple Documentationとしての状態、

  • アプリケーション:willFinishLaunchingWithOptions: - このメソッドは、起動時にコードを実行するには、アプリケーションの最初のチャンスです。

  • アプリケーション:didFinishLaunchingWithOptions: - この方法では、ユーザーが にアプリを表示する前に最終的な初期化を実行できます。

  • applicationDidBecomeActive: - アプリケーションにフォアグラウンドアプリになることを知らせる。この方法は、最後の分に使用してください。
    準備。

  • applicationWillResignActive: - あなたのアプリがフォアグラウンドアプリから移行していることを知っていることをお知らせします。このメソッドを使用して
    アプリを静止状態にします。

  • applicationDidEnterBackground: - あなたのアプリが現在バックグラウンドで実行されており、いつでも中断する可能性があることをお知らせします。

  • applicationWillEnterForeground: - あなたのアプリがバックグラウンドから外に出てフォアグラウンドに戻ってきたが、 まだアクティブではないことがわかります。

  • applicationWillTerminate: - あなたのアプリが終了していることを通知します。このメソッドは、アプリが停止されている場合は呼び出されません。

のでapplicationWillEnterForegroundapplicationWillResignActiveが呼び出されます!

1
- (void)applicationWillResignActive:(UIApplication *)application { 
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 
// Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 
} 


- (void)applicationDidEnterBackground:(UIApplication *)application { 
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 
} 


- (void)applicationWillEnterForeground:(UIApplication *)application { 
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 
} 


- (void)applicationDidBecomeActive:(UIApplication *)application { 
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 
} 


- (void)applicationWillTerminate:(UIApplication *)application { 
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 
} 

didFinishLaunchWithOptions didntのコール。

0

application's life cycleにアクセスすると、iosがアプリをサスペンドモードにするときに、アプリに通知が表示されません。あなたのアプリがバックグラウンドモードで入って、処理していない何かをしていなければ、iosは中断状態にします。 しかし、中断されていてメモリに残っているときは、アプリが以前と同じ画面を表示するために何もする必要はありません。 iosは自動的にアプリの状態を保持します。アプリケーションが中断モードで終了している場合のみ、これを管理する必要があります。メモリにはありません。

あなたがbackground execution方法のいずれかと、バックグラウンドで任意の実行を持っていない場合、あなたはapplicationDidEnterBackground店のどこかで、あなたのアプリの状態とapplicationWillEnterForegroundの通知を受け取る場合は、保存された状態でアプリを表示することができますサスペンドモードでアプリを考慮することができます。

または、バックグラウンドでいくつかの有限のタスクを実行している場合は、ローカル変数を保持し、それを使用して中断したものを追跡することができます。 applicationDidEnterBackgroundvariable = inBackground、完了時にvariable == inBackgroundvariable == inSuspendedと設定し、アプリの状態をどこかに保存します。 on applicationWillEnterForeground

if variable == inSuspended 
    { 
    //Display app according to previously stored state. 
    `variable == inForgorund`, 
} 
0

AppDelegateファイルでブレークポイントを使用して自分自身をテストできます。

ユーザーが[ホーム]ボタンを1回クリックすると、アプリは一時停止状態になります。 ホームボタンを2回クリックすると、アプリは非アクティブ状態です。

ユーザーがアプリケーションの中断状態から来ているうちに、次のメソッド呼び出しが見つかりました。

最初に:applicationWillEnterForeground、次にapplicationDidBecomeActive

didFinishLaunchingWithOptionsが呼び出されていません。

More details

関連する問題