【问题标题】:Continue getting data in background mode继续在后台模式下获取数据
【发布时间】:2020-04-05 18:19:24
【问题描述】:

我正在从服务器获取数据并向用户显示百分比。但是当我点击手机主页按钮时(我的意思是我的应用程序处于后台模式。不要杀死它)进程停止。当我再次打开应用程序时,它会继续。 我应该怎么做才能继续在后台模式下获取数据?

【问题讨论】:

标签: ios swift swift3


【解决方案1】:

您可以使用以下功能,它会让您的操作在后台运行 2-3 分钟。

  var aBackgroundTask: UIBackgroundTaskIdentifier = UIBackgroundTaskIdentifier.invalid


func registerBackgroundTask() {
        aBackgroundTask = UIApplication.shared.beginBackgroundTask { [weak self] in
              self?.endBackgroundTask()
        }
        assert(callLoggingBackgroundTask != UIBackgroundTaskIdentifier.invalid)
    }


func endBackgroundTask() {
    print("Background task ended.")
    UIApplication.shared.endBackgroundTask(convertToUIBackgroundTaskIdentifier(callLoggingBackgroundTask.rawValue))
    aBackgroundTask = UIBackgroundTaskIdentifier.invalid
}

操作开始时调用函数registerBackgroundTask(),操作结束时调用该函数endBackgroundTask()。

【讨论】:

    【解决方案2】:

    确保您已签入后台模式:

    YourApp -> 目标:YourApp -> 签名和功能 -> 检查后台模式

    ViewDidLoad()

    let app = UIApplication.shared
    
    NotificationCenter.default.addObserver(self, selector: #selector(applicationWillResignActive(notification:)), name: UIApplication.willResignActiveNotification, object: app)
    
    NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActive(notification:)), name: UIApplication.didBecomeActiveNotification, object: app)
    

    viewDidLoad下你可以添加这个

    @objc func applicationWillResignActive(notification: NSNotification){
            print("Entered background")
        }
    
    @objc func didBecomeActive(notification: NSNotification){
            print("Returned to application")
        }
    

    所以在 applicationWillResignActive 中,您可以简单地调用该方法继续阅读。

    我希望这是你要找的,否则我可以尝试尽可能多地编辑它。

    【讨论】:

    • "applicationWillResignActive" 在进入后台时被调用,但它不提供运行无限任务的能力。创建它是为了停止任何任务的运行和保存统计数据或暂停游戏。
    • @Beppe 在这种情况下,我很抱歉这个帖子。我正在使用那个来检索背景中的坐标,它工作正常。几个小时后仍会收到坐标。 :)
    • 别抱歉,正如我在回答中所写的那样,您可以随心所欲地获取位置更新或播放音乐,但您无法无休止地执行其他任务。系统将在几分钟后终止您的应用程序。准确地说,“applicationWillResignActive”在进入后台之前被调用,即使你按下两次主页按钮并在没有实际进入后台的情况下最小化你的应用程序。比“applicationWillResignActive”更好的是“applicationDidEnterBackground”
    【解决方案3】:

    据我所知,除非您的应用正在播放音乐或获取位置更新,否则操作系统不会让您的应用无限期地在后台运行。

    您可以告诉操作系统您的应用需要一些时间来结束一项任务,但通常不会超过一两分钟。

    这里有一个后台模式的教程,希望对你有帮助...

    https://www.raywenderlich.com/5817-background-modes-tutorial-getting-started

    【讨论】:

      猜你喜欢
      • 2019-06-09
      • 2015-10-14
      • 2012-06-21
      • 1970-01-01
      • 2016-03-14
      • 2012-02-05
      • 1970-01-01
      • 2020-01-06
      • 1970-01-01
      相关资源
      最近更新 更多