2

我正在创建一个简单的应用程序,它在主线程上执行一些任务。我正在打印进程,NSLog所以我可以了解我的进程是否正在运行。

现在,当我按下主页按钮而不启动进程时(当我点击按钮时进程将启动)应用程序进入后台并且我的两个方法applicationDidEnterBackgroundapplicationWillResignActive被调用。

但是当我第一次点击我的按钮并在主线程上启动进程时,如果我按下主页按钮,这两种方法都不会被调用。所以我的应用程序无法知道该应用程序是否在后台输入。

即使在那之后,当我再次激活该应用程序时,它也会向我显示一个只有状态栏的黑屏。

  1. 为什么会这样?
  2. 为什么应用程序不进入后台?
  3. 为什么不调用苹果的方法?
  4. 有没有办法解决它?

更新 这是我的 appdelegate 类代码

- (void)applicationWillResignActive:(UIApplication *)application
{

}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{

}

- (void)applicationDidBecomeActive:(UIApplication *)application
{

}

所有方法都没有实现。

提前致谢。

4

3 回答 3

4

我正在创建一个简单的应用程序,它在主线程上执行一些任务。

不要在主线程上执行长时间运行的操作。

委托回调发生在主线程上。如果主线程很忙,那么在您返回“运行循环”之前不会发生回调。

当您的应用程序前景化时,操作系统实际上会显示一个屏幕截图(如果有),然后退回到启动图像 (Default.png)。屏幕截图是在-applicationDidEnterBackground:返回后拍摄的,它允许您自定义保存的内容(出于安全原因,您可能希望这样做,或者隐藏在重新启动时可能没有意义的 UI 元素,例如倒数计时器)。

黑屏可能是因为您的应用没有启动图像。如果你的应用程序需要超过 10 秒才能进入后台(确实如此,因为主线程被阻塞了),它就会被杀死。除了调试器已附加并捕获 SIGKILL,因此除非您正在观看 Xcode,否则很容易错过。

于 2013-01-19T01:19:55.413 回答
2

有一些情况

如果UIApplicationExitsOnSuspend在您的应用程序中将 key 设置为 true Info.plist,则当用户点击主页按钮时不会调用 applicationWillResignActive 方法。可能还有别的东西。在此处检查密钥Apple 密钥,看看您是否向 plist 添加了新内容。并且没有其他情况表明您的委托方法没有调用。由于项目的适当行为,它也可能有一段时间。尝试清理您的项目并重建。

于 2012-05-21T05:18:55.063 回答
0

这听起来很奇怪,但对那些有帮助的人来说。我遇到了同样的问题并清理了我的项目,然后它又开始工作了。

于 2013-01-19T00:48:41.457 回答