在'applicationDidBecomeActive'之后调用什么方法?

这是我的第一个问题,因为我有一个开发我的第一个iOS应用程序的问题。 这是成千上万的手电筒应用程序之一,但我试图把尽可能多的function。 其中之一是保存应用程序的状态,当它去背景或终止。 进入前台(iOS 4或更高版本)或重新启动后,我从文件加载设置并重新应用它们。 显然,其中一个设置是AVCaptureDevice.torchMode 。 但是,我遇到了这个问题。 我在applicationDidBecomeActive方法中重新applicationDidBecomeActive这些设置。 这一切似乎工作,但当我很快点击主页button,然后重新启动应用程序,应用程序将执行以下操作(我推迟了applicationDidBecomeActive方法观察它):

1.显示黑屏(加载)
2.执行applicationDidBecomeActive并打开LED(我把我的延迟放在这里)
3.显示我目前的UIViewController ,同时closuresLED

只有在发送到后台后才从后台调用应用程序。 我知道这不是现实的使用情况,但是我喜欢认为这些错误经常会“叠加”,并且由于这种(可能)糟糕的devise,我将来可能会遇到其他问题。 我绝对相信,这不是我的代码,因为我的代码修改AVCaptureDevice.torchMode属性,我的NSLog代码closures。 所以,确切的说,我的问题是:
applicationDidBecomeActive之后调用什么方法,可能与UIViewController相关,这可能会closures我的手电筒? 是否有任何可能的解决scheme或解决办法?

根据iOS应用程序编程指南 :

回到前台,您的应用程序有机会重新启动它移到后台时停止的任务。 移动到前台时出现的步骤如图3-6所示。 applicationWillEnterForeground:方法应该撤销在applicationDidEnterBackground:方法中完成的任何操作,并且applicationDidBecomeActive:方法应该继续执行与启动时相同的激活任务

你有没有尝试在applicationDidBecomeActive:方法而不是applicationDidBecomeActive:重新应用你的设置applicationWillEnterForeground:

另一件要考虑的事情是使用通知:

在AppDelegate的applicationDidBecomeActive:applicationDidBecomeActive:方法中,您可以告诉应用程序委托将通知发送到您的控制器:

 - (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. */ // Dispatch notification to controllers [[NSNotificationCenter defaultCenter] postNotificationName: @"didBecomeActive" object: nil userInfo: nil]; } 

一旦你有了这个,视图控制器可以注册这些通知(例如在他们的init方法中),如下所示:

 [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(loadSettings) name: @"didBecomeActive" object: nil]; 

这样,您的控制器就知道该应用程序刚刚变为活动状态,并且可以执行任何您想要的方法。

在这个例子中,当您收到didBecomeActive通知(由应用程序loadSettings时,您告诉您的视图控制器执行loadSettings方法。

我只有一个答案,为什么一个快速停止启动的应用程序将显示一个黑色的屏幕,我没有参考只有个人的经验和观察。

当应用程序发送到后台时,操作系统会尝试使用屏幕快照代替Default.png 。 如果您在截图之前启动应用程序,并且您的项目中没有Default.png ,那么您将得到该信息。

还在想你的实际问题。