我们可以在-applicationWillTerminate方法中设置一个计时器吗?

时间:2011-12-09 03:12:08

标签: iphone ios4 timer uiapplicationdelegate

我有一个应用程序从网页中提取数据并将其填充到UITableView中。我看到我的应用程序即使在按下主页按钮很长一段时间后也没有终止。我意识到如果手机内存不足,操作系统会杀死应用程序。我不想在pinfo中执行“添加密钥 - >应用程序不在后台运行”。我希望应用程序保持状态一段时间。我想知道我们是否可以在- (void)applicationWillTerminate:(UIApplication *)application{}中设置计时器 方法,以便应用程序可以终止,如果它不活动1个小时,然后重新启动。

感谢。

2 个答案:

答案 0 :(得分:3)

简单&快速回答,不可以。按下主页按钮后,您无法运行计时器一小时。您可以做的是熟悉用户按下主页按钮然后切换回您的应用程序时所做的调用。

这些是您现在将收到的电话(多任务处理):

// User taps your app icon first launch
application:didFinishLaunchingWithOptions:
applicationDidBecomeActive:

// User pushes home button
applicationWillResignActive:
applicationDidEnterBackground:

// User selects your app again
applicationWillEnterForeground:
applicationDidBecomeActive:

如果您将Application does not run in background键设置为YES,或者如果您的设备不支持多任务处理(即iPod touch 2nd Gen),则完全相同的操作将调用这些方法。

// User taps your app icon first launch
application:didFinishLaunchingWithOptions:
applicationDidBecomeActive:

// User pushes home button
applicationDidEnterBackground:
applicationWillTerminate:

// User selects your app again
application:didFinishLaunchingWithOptions:
applicationDidBecomeActive:

请注意,如果操作系统决定杀死你的应用程序以获取内存,它不会叫醒你只是为了杀死你,你永远不能保证接到applicationWillTerminate:电话。

我可以想到你的问题的两个动机:

1)你想要保存状态,并希望在applicationWillTerminate:中进行,但它没有被调用。如果是这种情况,我会建议在applicationDidEnterBackground:中保存状态,因为在用户按下主页按钮的两种情况下都会调用它。

2)如果应用程序在一段时间内处于非活动状态,您想重新加载数据。如果是这种情况,请存储applicationDidEnterBackground:期间的当前时间,并检查applicationDidBecomeActive:中已经过了多长时间并在必要时重新加载。

答案 1 :(得分:1)

当您的应用移到后台时,您可以请求额外的时间(最多,我认为,500秒?)来完成一些长时间运行的任务(请参阅-beginBackgroundTaskWithExpirationHandler:的{​​{1}})。但是你永远不能安排你的应用程序“唤醒”或在后台/终止后重新加载。

对于跟踪用户位置或需要接收传入VOIP呼叫的应用,此规则有特定的例外情况。如果您的应用符合条件,请参阅iOS应用编程指南的Background Execution and Mutitasking部分。