applicationDidEnterBackground 和 applicationWillTerminate 都在用户向上滑动退出应用程序时调用

Posted

技术标签:

【中文标题】applicationDidEnterBackground 和 applicationWillTerminate 都在用户向上滑动退出应用程序时调用【英文标题】:applicationDidEnterBackground and applicationWillTerminate both called when user swipes up to quit app 【发布时间】:2015-09-02 05:13:16 【问题描述】:

我正在为用户将应用程序发送到后台或完全退出应用程序时添加一些通知。然而,当他们退出应用程序时,applicationDidEnterBackgroundapplicationWillTerminate 方法都会被调用。为什么会这样?当用户退出应用程序时,我怎样才能让 applicationWillTerminate 被调用?

如果有人想知道,这是 Objective-c。

【问题讨论】:

我已经在一个新的、干净的项目中测试了这种现象。我有同样的经历。所以它与我的代码无关。 【参考方案1】:

applicationWillTerminate方法只有在应用程序被终止时不处于挂起状态时才会被调用。

以下链接可能对您有所帮助 -

Which function is called when iPhone app is terminated?

applicationWillTerminate when is it called and when not

【讨论】:

双击主页按钮以显示多任务不会将应用程序置于后台,我已经对此进行了测试。然后,当我向上滑动以退出应用程序时,这两种方法都会被调用。请给我一个实际示例,说明何时单独调用 willTerminate 您的回复并没有解决我的问题。我不是在询问何时调用或不调用它,而是需要知道为什么在退出和应用程序时将两者一起调用,而不是单独调用 applicationWillTerminate ... 或者解决问题的解决方案【参考方案2】:

看到applicationWillTerminate 是在applicationDidEnterBackground 之后调用的,我决定将notification.fireDate 设置为从调用applicationDidEnterBackground 开始的1 秒。当applicationWillTerminate 被调用时,它首先取消在applicationDidEnterBackground 中安排的通知。

伪代码:

-applicationDidEnterBackground()

    [self scheduleLocalNotificationAtTimeIntervalFromNow:1.0f  identifier: @"someIdentifier"];


-applicationWillTerminate

    [self cancelLocalNotificationWithIdentifier: @"someIdentifier"];
    [self scheduleLocalNotificationAtTimeIntervalFromNow:0.0f  identifier: @"irrelevantIdentifier"];

【讨论】:

这种方法虽然俗气,但同时也适用于我的场景。比同时收到 didEnterBackground 和 willTerminate 通知要好。

以上是关于applicationDidEnterBackground 和 applicationWillTerminate 都在用户向上滑动退出应用程序时调用的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发简单的实现后台任务(诸如后台播放音乐,定时器,后台定位等)