applicationDidEnterBackground& applicationWillResignActive未被调用

时间:2012-05-21 04:45:03

标签: iphone ios uiapplicationdelegate

我正在创建一个在主线程上执行某些任务的简单应用程序。我正在NSLog打印流程,因此我可以理解我的流程是否正在运行。

现在,当我按下主页按钮而不启动过程时(当我按下按钮时将开始处理)应用程序进入后台并且我的两个方法applicationDidEnterBackground&正在调用applicationWillResignActive

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

即便如此,当我再次激活应用程序时,它会向我显示仅带状态栏的黑屏。

  1. 为什么会这样?
  2. 为什么app不能进入后台?
  3. 为什么没有调用apple的方法?
  4. 有办法解决吗?
  5. 更新 这是我的appdelegate类代码

    - (void)applicationWillResignActive:(UIApplication *)application
    {
    
    }
    
    - (void)applicationDidEnterBackground:(UIApplication *)application
    {
    }
    
    - (void)applicationWillEnterForeground:(UIApplication *)application
    {
    
    }
    
    - (void)applicationDidBecomeActive:(UIApplication *)application
    {
    
    }
    

    所有方法都没有实施。

    提前致谢。

3 个答案:

答案 0 :(得分:3)

  

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

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

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

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

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

答案 1 :(得分:2)

有一些案例

如果应用的UIApplicationExitsOnSuspendInfo.plist键设置为true,则当用户点击主页按钮时,不会调用applicationWillResignActive方法。还有其他一些东西。在这里查看密钥Apple keys并查看是否有新内容添加到plist中。并且没有其他情况表明您的委托方法没有调用。由于项目采取适当的行为,也可能还需要一段时间。尝试清理您的项目并重建。

答案 2 :(得分:0)

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