当前位置: 首页 > 面试题库 >

应用终止时执行后台任务

公羊曜灿
2023-03-14
问题内容

我正在为我的学校创建一个应用程序,该应用程序应每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是任务。

提前致谢!


问题答案:

你有两个选择

  1. 后台程序刷新
  2. 静默推送通知

最简单的一种是后台应用刷新。因为以后需要服务器发送通知。您可以检查以下API的用法。基本上,您可以在应用程序的功能/背景模式下设置
后台提取
功能。然后,iOS会不时唤醒您的应用程序并致电application(_:performFetchWithCompletionHandler:)代表。您将有大约30-45秒的时间来调用函数并调用完成处理程序。如果您未按时完成操作,iOS将终止您的应用程序。如果您不遵守规则,iOS将为您提供更少的唤醒机会。有关后台模式的更多详细用法,请查看以下教程



 类似资料:
  • 我有一个压缩图像的任务,它在图像中使用了许多循环: 我在普通线程中运行此方法,如下所示: 或者在后台工作线程中运行 问题是:这种方法有时会出错,在接收无效输入时会导致无限循环。在这种情况下,它将永远运行,并损害CPU,即使当设备的屏幕关闭时,这会增加设备的温度(如果我使用工作线程,它还会阻止等待队列中的其他任务)。 我想我需要设置一个超时来终止长时间运行的任务。在正常Java线程中实现这一点的最佳

  • 我正在构建一个应用程序,即使应用程序在后台,也需要保持位置跟踪。基本上,我正在使用播放服务的GoogleApiClient和LocationServices。FusedLocationApi.request位置更新方法来调用IntentService。 下面的代码是我如何在活动的后台触发位置更新: 效果很好 但是,当用户(通过任务管理器)终止应用程序时,我想停止此IntentService(称为L

  • 问题内容: 如何防止gnome-terminal退出给定命令后退出? 我正在从cronjob调用gnome-terminal,以创建用户可访问的终端。最初为终端提供了要运行的特定程序。例如 这很好,除了退出“ myprog”时,gnome-terminal也是如此。我如何保持它运行,而只是回到终端提示符? 问题答案: 尝试这个:

  • 本文向大家介绍把后台任务调到前台执行使用什么命令?把停下的后台任务在后台执行起来用什么命令?相关面试题,主要包含被问及把后台任务调到前台执行使用什么命令?把停下的后台任务在后台执行起来用什么命令?时的应答技巧和注意事项,需要的朋友参考一下 答案: 把后台任务调到前台执行 fg 把停下的后台任务在后台执行起来 bg

  • 问题内容: 我有登录屏幕的GUI。每当我按下登录按钮时,都会对照在线mysql数据库中的输入检查用户名和密码,我正在通过登录按钮的actionPerformed()方法从数据库中提取所有这些信息。问题是程序正在从数据库中获取数据时, GUI冻结。我搜索了我的问题,发现我应该使用SwingWorker,但是作为一个新手,我没有获得如何使用SwingWorker的目的。 问题答案: 首先,在您的类中声

  • 我创建了一个自定义后台服务,它正在扩展IntentService。当我的应用程序进入后台时,我会调用这个类。startService()。Firsly onStartCommand在我返回START_STICKY的地方被调用(就像我读过一些其他帖子,以保持我的服务处于活动状态,并在由于内存不足而被终止时根据需要重新创建)。在那之后,我将实现onHandleIntent(intent)方法,从调用者