【问题标题】:Performing Activity, When the App is Terminated执行活动,当应用程序终止时
【发布时间】:2016-12-16 07:53:53
【问题描述】:

我是 iOS 开发的新手,所以请原谅我提前问了这个问题。

我正在尝试通过 API 发布一些数据(在特定时间之后,比如说 30 分钟),我能够在应用程序处于前台或后台时实现这一点,但即使应用程序处于终止?我可以通过这段代码在应用程序处于后台时执行此活动

UIApplication *app = [UIApplication sharedApplication];
UIBackgroundTaskIdentifier bgTask;
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
    [app endBackgroundTask:bgTask];
}];

但是一旦应用程序终止,一切都会停止。我发现 iOS 应用程序的线程在其终止 3 分钟后被终止。

间隔后呈现 UIView

如果上述情况可行,那么即使应用程序终止,是否也可以为特定的 UIView 设置动画以在特定时间后出现在屏幕上。 提前致谢。

【问题讨论】:

标签: ios objective-c uiview


【解决方案1】:

当您的应用程序终止时,它无法执行任何代码;您可以在applicationWillTerminate在应用程序终止时执行一些代码,如果它被调用的话。在很多情况下不会。

在 iOS 上,如果您的应用暂停,您将无法在特定时间或特定时间间隔后执行代码。

您可以安排本地通知以提示您的用户返回您的应用,但如果他们没有点击通知或从其图标启动您的应用作为响应,那么您将无法执行任何代码。

【讨论】:

  • 请注意,applicationWillTerminate 在很多情况下都不会被调用。不要依赖它。
【解决方案2】:

看看UIApplicationDelegate协议hereapplicationWillTerminate:方法。一旦系统决定关闭您的应用程序,就会调用此方法,让您可以在应用程序完成之前完成您的应用程序需要做的所有事情。这可能会根据需要将 API 数据发布到您的服务器。

请注意,根据文档,不能保证在用户按下主页按钮时调用此方法,而只能在系统决定终止应用程序时调用:

对于支持后台执行的应用,一般不会在用户退出应用时调用此方法,因为在这种情况下应用只是移动到后台。


如果您不了解 Cocoa Programming 中 Delegates 的概念,请将它们视为您的应用程序(它必须是应用程序的代表)和您的应用程序本身。该应用程序将告诉您的控制器是否发生了一些有趣的事情,例如应用程序启动或关闭。注意:这也适用于 macOS 编程。

【讨论】:

  • 这意味着当我的应用程序终止时我无法执行任何活动?
  • 这意味着:系统决定杀死你的应用程序,系统通知你你的应用程序将被杀死,你现在(在applicationWillTerminate:)有可能做你想做的一切(确实如此您现在可以在此处执行活动),完成后,系统最终会终止您的应用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多