【问题标题】:applicationDidEnterBackground: and time to write on a databaseapplicationDidEnterBackground:以及写入数据库的时间
【发布时间】:2011-01-22 19:12:46
【问题描述】:

当应用程序终止时,我将数据写入数据库。

由于没有调用 iOS 4 applicationWillTerminate:,我在 applicationDidEnterBackground: 和 applicationWillTerminate: 中都放置了相同的保存代码:

我读到 applicationDidEnterBackground: 中执行的任务需要一些时间。

那么,如果在 db 上的写入需要更多时间,我该如何管理呢?

【问题讨论】:

    标签: database ios background writing


    【解决方案1】:

    您有 5 秒的时间在 applicationDidEnterBackground: 方法中执行任何保存等操作。

    如果您需要超过 5 秒的时间,则此 UIApplication 方法可以请求后台线程,这将允许您有更多时间做任何您需要的事情:

    - (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void(^)(void))handler
    

    这是 Apple 的示例代码:

    http://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html#//apple_ref/doc/uid/TP40007072-CH5-SW12

    【讨论】:

    • applicationWillTerminate 不会有同样的问题吧?
    • 这两种方法的问题基本相同。 Apple 希望您的应用程序完全保存在后台,以便在需要 RAM 时清除它。您会发现在设备 >= 3GS 的 iOS 4 上几乎从未调用 applicationWillTerminate。将后台视为应用程序的保存和关闭,如果您从 RAM 中恢复,那将是一种奖励。
    • 我有点困惑 :) 在 iOS4 和更高版本的情况下,我可以使用 beginBackgroundTaskWithExpirationHandler 来确保数据库上的保存已完成。在 iOS
    • 嗯,在那种情况下你有点搞砸了。在 iOS4 之前,您必须在规定的时间内完成它。我不能 100% 确定 iOS4 之前的 5 秒,但你别无选择,只能让它适应。如果您必须超过给定的时间,最好的选择是在退出之前尝试保存。请注意,5 秒是相当长的时间。
    • 非常感谢您的解释!
    猜你喜欢
    • 2019-12-20
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 2021-04-27
    相关资源
    最近更新 更多