应用终止时(通过用户或操作系统)获取回调

时间:2019-02-14 05:43:37

标签: ios objective-c swift

我想在我的iOS应用程序终止时执行一段代码(applicationWillTerminate不能一直工作)。

我想做的是每当应用终止时,我想取消本地通知并依靠推送通知,因为我的本地通知内容是动态的,当应用处于前台或后台时,它会通过静默通知进行更新。 附言本地通知每10分钟触发一次,因此不能一直依赖推送通知。

谢谢。

2 个答案:

答案 0 :(得分:0)

当用户终止应用程序而不将其切换到后台模式时,将调用

applicationWillTerminate。因此,用户必须必须双击Home按钮并抛出应用程序才能执行applicationWillTerminate操作。

感谢@Cristik进行纠正。

Note:- applicationWillTerminate is not called when the user quits the app if the app supports background execution.

您可以检查以下内容:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        if UserDefaults.standard.bool(forKey: "terminated") {
            DispatchQueue.main.async {
                let alertView: UIAlertController = UIAlertController.init(title: "Prompt", message: "App was terminated earlier", preferredStyle: .alert)
                let alertAction = UIAlertAction(title: "Done", style: .cancel) { (action:UIAlertAction) in
                    UserDefaults.standard.removeObject(forKey: "terminated")
                    UserDefaults.standard.synchronize()
                }

                alertView.addAction(alertAction)

                self.window?.rootViewController?.present(alertView, animated: true, completion: nil)
            }
        }

        return true
}
func applicationWillTerminate(_ application: UIApplication) {
        UserDefaults.standard.set(true, forKey: "terminated")
        UserDefaults.standard.synchronize()
}

答案 1 :(得分:0)

在某些情况下,iOS会终止您的应用程序。例如,如果您的应用处于暂停模式(处于后台且未执行代码),并且iOS设备中存在内存不足的情况。在这种情况下,iOS开始根据其规则终止应用程序。无论如何,在这种情况下,您不会收到有关应用终止的任何回调形式的操作系统。

但是有一条线索可能会对您有所帮助。 现在假设您已在Xcode中启用了一种后台模式功能,例如蓝牙。在这种情况下(您的应用程序之前已被iOS终止),如果发生了相关的蓝牙事件,则iOS会再次运行您的应用程序,并告诉您的应用程序该操作系统运行该应用程序的原因是什么。此信息存储在此功能的LunchOptions中:

application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil)

使用这些信息,您可以决定在应用程序运行开始时要做什么。