Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在应用程序终止时执行后台任务_Ios_Swift - Fatal编程技术网

Ios 在应用程序终止时执行后台任务

Ios 在应用程序终止时执行后台任务,ios,swift,Ios,Swift,我正在为我的学校创建一个应用程序,它应该每n分钟检查一次网站上是否有新的分数。 要在用户首次登录时执行此操作,实际标记的编号将保存在“UserDefaults”中。当应用程序终止时,n分钟后,重新计算标记数,并与前一个标记数进行比较,如果标记数发生变化,则发送通知 我想知道的是,是否有执行此任务的方法。我试图在-applicationWillTerminate中创建一个计时器,但只触发了一次。 这就是我所尝试的: func applicationWillTerminate(_ applicati

我正在为我的学校创建一个应用程序,它应该每n分钟检查一次网站上是否有新的分数。 要在用户首次登录时执行此操作,实际标记的编号将保存在“UserDefaults”中。当应用程序终止时,n分钟后,重新计算标记数,并与前一个标记数进行比较,如果标记数发生变化,则发送通知

我想知道的是,是否有执行此任务的方法。我试图在-applicationWillTerminate中创建一个计时器,但只触发了一次。 这就是我所尝试的:

func applicationWillTerminate(_ application: UIApplication) {
    DispatchQueue.main.async {
        self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(AppDelegate.findMark), userInfo: nil, repeats: true)
        self.timer.fire()
    }
}
选择器findMark是任务


提前谢谢

应用程序终止后,无法执行问题中所述的任务。如文件所述:

应用程序终止

应用程序必须随时准备终止,不应等待保存用户数据或执行其他关键任务。系统启动的终止是应用程序生命周期的正常部分。系统通常会终止应用程序,以便回收内存并为用户启动的其他应用程序腾出空间,但系统也可能会终止行为不正常或未及时响应事件的应用程序

暂停的应用程序在终止时不会收到通知;系统终止进程并回收相应的内存。如果某个应用程序当前正在后台运行且未挂起,系统将在终止前调用其应用程序委托的applicationWillTerminate:。设备重新启动时,系统不会调用此方法

除了系统终止应用程序外,用户还可以使用多任务UI显式终止应用程序。用户发起的终止与终止挂起的应用程序具有相同的效果。应用程序的进程被终止,并且不会向应用程序发送通知

链接:

编辑:

应用程序终止后,您无法执行任何任务。您可以做的是从服务器端完成计算,并向设备发送一个推送通知。

您有两个选择

  • 后台应用程序刷新
  • 静默推送通知

  • 最简单的方法是后台应用程序刷新。因为稍后需要服务器来发送通知。您可以检查以下用法。基本上,您可以在应用程序的功能/后台模式上设置后台提取功能。然后,iOS会不时唤醒你的应用程序,并调用
    应用程序(u3;:performFetchWithCompletionHandler:)
    委派。您将有大约30-45秒的时间来调用函数和调用完成处理程序。如果你不按时完成,iOS将杀死你的应用程序。如果你不遵守规则,iOS会减少你醒来的机会。有关背景模式的更详细用法,您可以准确地检查以下内容,答案是肯定的。但你不应该。 我们可以使用位置来归档您的目标。 根据此处的官方文件::

    注意:如果您的应用程序被用户或系统终止,则 新位置出现时,系统不会自动重新启动应用程序 更新到达。用户必须在重新启动应用程序之前显式重新启动应用程序 继续交付位置更新。拥有你的应用程序的唯一方法 自动重新启动是为了使用区域监视或 位置服务发生重大变化

    因此,我们可以通过启动“重大更改位置”服务对其进行归档:

    如果您让重要更改位置服务保持运行,并且 iOS应用程序随后被暂停或终止,服务 当新位置数据到达时自动唤醒您的应用程序。在 唤醒时间,应用程序被放在后台,您将获得一个 手动重新启动位置的少量时间(约10秒) 服务和处理位置数据。(您必须手动重新启动 在任何挂起的位置之前的后台位置服务 可以交付更新,如“知道何时开始”中所述 位置服务。)因为你的应用程序在后台,所以它必须 尽可能减少工作量,避免执行以下任务(如查询网络) 可能会阻止它在分配的时间到期之前返回。如果 否则,您的应用程序将被终止。如果iOS应用程序需要更多 时间来处理位置数据,它可以要求更多的背景 使用 beginBackgroundTaskWithName:expirationHandler:的方法 UIC应用程序类

    调用位置更新将使用选项和应用程序完成启动IDBECOMEACTIVE,然后您可以立即执行自己的代码

    [_locationManager startUpdatingLocation];
    

    但如果电池电量耗尽,应用商店可能会拒绝您

    当应用程序终止时,无法执行此操作。请核对我的答案。请随时提出疑问:)您打算在后台无限期运行应用程序还是在应用程序终止时运行应用程序?我的理解是,您希望在后台无限期运行应用程序,并且每当计数器更新标记数时,您都希望发送通知,这是您打算做的吗?是,@Sharpkits..infinite timeSee:谢谢,那我该怎么办?因为有很多离线游戏会在建筑物终止时发送通知。。甚至当应用程序使用多任务管理器手动关闭时,也会出现这种情况。这是PushNotification或LocalNotification。如果这是需要的,那么我会在回答中补充这一点。等等..是的,我指的就是。。但当应用程序关闭时,仅当我再次阅读您的问题时,才会调用发送本地通知的任务。当应用程序终止时,您无法计算应用程序内网站的分数。当应用程序终止时,您无法发送UILocalNotification。但是,您可以从服务器发送推送通知。我已经读到该应用程序(u:performFetchWithCompletionHandler:)不执行任务