我正在创建一个在主线程上执行某些任务的简单应用程序。我正在NSLog
打印流程,因此我可以理解我的流程是否正在运行。
现在,当我按下主页按钮而不启动过程时(当我按下按钮时将开始处理)应用程序进入后台并且我的两个方法applicationDidEnterBackground
&正在调用applicationWillResignActive
。
但是当我第一次点击我的按钮并且主进程上的进程开始之后,如果我按下主页按钮,则不会调用这两种方法。所以我的应用程序无法知道该应用程序是否在后台输入。
即便如此,当我再次激活应用程序时,它会向我显示仅带状态栏的黑屏。
更新 这是我的appdelegate类代码
- (void)applicationWillResignActive:(UIApplication *)application
{
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
}
所有方法都没有实施。
提前致谢。
答案 0 :(得分:3)
我正在创建一个简单的应用程序,它在主线程上执行一些任务。
不要在主线程上执行长时间运行。
委托回调发生在主线程上。如果主线程忙,那么在返回“运行循环”之前不会发生回调。
在对应用程序进行前景化时,操作系统实际显示屏幕截图(如果可用),然后返回到启动图像(Default.png)。屏幕截图是在-applicationDidEnterBackground:
返回后拍摄的,它允许您自定义保存的内容(出于安全原因,您可能希望这样做,或者隐藏重新启动时可能没有意义的UI元素,例如倒数计时器)
黑屏可能是因为您的应用没有启动图片。如果您的应用程序需要超过大约10秒才能进入后台(并且确实如此,因为主线程被阻止),它会被杀死。除了附加调试器并捕获SIGKILL,因此除非您正在观看Xcode,否则很容易错过。
答案 1 :(得分:2)
有一些案例
如果应用的UIApplicationExitsOnSuspend
中Info.plist
键设置为true,则当用户点击主页按钮时,不会调用applicationWillResignActive方法。还有其他一些东西。在这里查看密钥Apple keys并查看是否有新内容添加到plist中。并且没有其他情况表明您的委托方法没有调用。由于项目采取适当的行为,也可能还需要一段时间。尝试清理您的项目并重建。
答案 2 :(得分:0)
这听起来很奇怪,但对于那些有帮助的人。我遇到了同样的问题并清理了我的项目,然后又开始工作了。