【问题标题】:Is a Timer disabled automatically when app resigns active on the iphone?当应用程序在 iPhone 上退出活动时,计时器是否会自动禁用?
【发布时间】:2023-03-30 18:54:01
【问题描述】:

玩弄定时器,并试图让它们在应用程序被发送到后台、被杀死等时表现正确。

从 xcode 中生成的 cmets 来看,您应该在 resignActive/enterBackground 事件上禁用/无效计时器。

但是,我还没有这样做,但检查了当我单击主页按钮然后重新进入应用程序时我的计时器会发生什么。

在我看来,我基本上有一个方法,计时器每秒触发一次:

NSLog(@"workedTimTimerTick workedTime; %@", timeString);

当我退出应用程序时,输出停止,当我重新进入应用程序时,输出再次开始......

既然我没有对这些生命周期事件的计时器做任何代码方面的事情,它怎么会停止被调用?

感谢您的意见!

【问题讨论】:

    标签: iphone objective-c timer application-lifecycle


    【解决方案1】:

    您的应用程序在进入后台模式时暂停 (Application States and Transitions)。

    当应用处于后台时,您的计时器不会触发,并且在后台花费的时间不会被计入计时器延迟。

    【讨论】:

    • 谢谢老兄,就像我当时想的那样。你能告诉我为什么 xcode 中生成的 cmets 说我应该手动禁用 resignactive-call 上的计时器吗?如果操作系统无论如何都会暂停计时器,这似乎是不必要的。
    • @Mathias 我猜这可能与内存有关(计时器保留其目标直到被触发或失效)。在用户返回时的剩余延迟之后触发它可能不相关(尤其是在很长的后台时间之后)。
    • 是的,我最终这样做了,但出于另一个原因:) 我有一个 appdelegate 可以在三个视图之间切换,并且每次切换时我都会释放旧视图并创建新视图。我注意到除非我也杀死计时器,否则带有计时器的视图不会被释放,这当然不足为奇。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    相关资源
    最近更新 更多