1
我有一个简单的倒数计时器,每秒更新一个标签。当点击主页按钮或应用程序被放置在背景中时,如何保持状态或幻觉?NSTimer:applicationDidEnterBackground:倒计时(如何保持状态)
我有一个简单的倒数计时器,每秒更新一个标签。当点击主页按钮或应用程序被放置在背景中时,如何保持状态或幻觉?NSTimer:applicationDidEnterBackground:倒计时(如何保持状态)
实际上,如果您只需要维护计时器,则无需在后台运行。在您的应用代理的applicationWillTerminate:
中,创建一个包含NSTimer消防时间的NSDictionary,并使用-[NSDictionary writeToFile:atomically:]
将其写入plist,然后在应用代理的application:didFinishLaunchingWithOptions:
的某处使用-[NSDictionary initWithContentsOfFile:]
读回。
如果您正在后台运行,请在applicationDidEnterBackground:
和applicationWillEnterForeground:
中执行相同操作。如果您使用此解决方案,请务必在写入plist后使计时器无效。
谢谢约翰,我正在尝试这个http://stackoverflow.com/questions/1587918/is-it-possible-to-save-the-state-of-a-timer-in-the-user-defaults 。相当困惑,但按下主页按钮时,应用程序会进入后台还是终止?还有在后台时,NSTimers会失效吗? – Ronn 2010-08-27 21:12:49
按住home按钮时的行为在iPhone OS 3.x和iOS 4.0中不同。在4.0中,applicationWillTerminate不会被调用,并且您的应用程序(通常)会被放入后台,定时器不会触发,但它们不会失效(除非您自己在暂停方法中执行此操作);他们会在你的应用程序被带回到前台时再次开始启动。但是你的应用可能也会被杀死并重新启动。 – hotpaw2 2010-08-27 23:32:56
在您的MyApp-Info.plist中,具有原始键UIApplicationExitsOnSuspend(友好值:应用程序不会在后台运行)的条目确定调用的是applicationWillTerminate:或applicationDidEnterBackground :.我不相信计时器失效,但我不确定他们是否在后台开枪。任何已经通过的定时器都可能在应用程序激活时立即启动。第二代iPod Touch和iPhone 4之间的这种行为也可能有所不同。 – 2010-08-28 13:29:00