当我的 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 7 和 iOS 8 在这里有所不同。我也找不到关于它的文件。
所以在 iOS 7 中,如果你有来电 applicationWillResignActive: 将首先被调用。如果您拒绝电话 applicationDidEnterBackground 将不会被调用;但如果您接听电话 applicationDidEnterBackground 将被调用,当您结束电话并且您的应用再次激活时 applicationWillEnterForeground: 也会被调用。
但是在 iOS 8 中只有 applicationWillResignActive: 无论你接不接电话都会被调用。
关于ios - 拨出电话时的后台行为,iOS 7 与 iOS 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27198588/