【发布时间】:2014-11-29 03:34:59
【问题描述】:
当我的 iOS 应用通过以下操作拨打电话时:
NSString *telephoneUrl = @"tel:12345678";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:telephoneUrl]];
应用生命周期状态会发生什么变化?
例如如果我将以下几行放在上述电话线下方:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"dispatch callback was called!!!");
});
在 iOS 7 上,applicationDidEnterBackground 被调用,上面的代码没有运行,当电话终止时,我在电话应用程序中。只有当我返回我的应用程序时才会编写控制台行。
然而,在 iOS 8 上,只有applicationWillResignActive 被调用并且应用程序没有进入后台,当我在电话中时,您实际上可以看到日志正在写入控制台。当通话终止时,我仍在我的应用程序中。
有人可以确认该行为,或将我指向相关文档吗?
【问题讨论】:
-
听起来 iOS 8 实际上并没有在应用程序后台运行,只是将手机应用程序放在您的应用程序之上。通过加载 Siri 可以体验相同的功能。该应用程序不是活动应用程序,但也没有被后台处理。您是否有正在寻求帮助的实际问题,或者您只是在寻找有关州的更多信息?此外,您可能只是出于调试原因这样做,但应避免将代码设置为在很长时间后执行(显然,在很多情况下,这是唯一有意义的事情,但在这里一般来说)。
-
我希望有人可能拥有有关电话行为的最终文档,而不是我自己的反复试验。感谢您提供有关 Siri 场景的信息,这是一个有用的示例。
-
我通常会在提供链接和更完整的 cmets 方面做得更好,但我仅限于手机使用 atm,所以我输入的任何内容都是凭记忆做的。尽管应该注意的是,许多 iOS 8 文档目前更多地是对预期行为与实际行为的描述 - 他们仍在解决许多错误。