【问题标题】:Execute a method infinitely using NSTimer and NSRunLoop使用 NSTimer 和 NSRunLoop 无限执行一个方法
【发布时间】:2016-02-23 11:48:58
【问题描述】:

我需要每 30 分钟每隔 1 分钟执行一个方法。 30 分钟后,我想在接下来的 30 分钟内休眠应用程序。

我尝试使用 UIBackgroundTaskIdentifier API,它只允许我执行代码 180 秒不超过此。

我不想使用静默远程通知。

使用 NSTimer 和 NSRunLoop 我已经实现了这一点,但我想知道当我提交时苹果会拒绝我的应用程序。

请帮帮我。

- (void)applicationDidEnterBackground:(UIApplication *)application {
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];
    NSTimer *loop = [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(insideLoop) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:loop forMode:NSRunLoopCommonModes];
}
-(void)insideLoop {
    NSLog(@"insideLoop");
}

【问题讨论】:

  • 您不能无限期地在后台运行。您的应用将在 180 秒后终止
  • 当我尝试时,它正在无限期地记录。
  • 当您在调试器下运行时,您的应用程序不会在超过后台时间时终止,但在您没有时它会终止。

标签: ios objective-c background nstimer nsrunloop


【解决方案1】:

是的,如果您这样做,Apple 会拒绝您的应用。

我也想出了一种方法让应用程序在后台无限期地保持唤醒状态,但它违反了 Apple 的规则并消耗了用户的电池。

【讨论】:

  • 是的,这是我的担心。所以你有什么建议。谢谢
  • 我的建议是:不要那样做。
  • Apple 不希望应用程序无限期地在后台运行,并且不允许它们出现在应用商店中。您可以使用企业帐户将此类应用程序分发给其他员工,或者您可以在越狱手机上执行此类操作,但除此之外,不可以。我认为没有应用商店认可的方式来做你想做的事。
  • 如果我使用静默远程通知将应用程序置于后台并使用服务器端的自动脚本执行一段代码以每 1 分钟发送一次推送消息。
  • 等待您的回复。
【解决方案2】:

所以你不可能用这种特殊的方法找到方法。

当设备发生特定事件(例如位置更改)时,可以选择触发代码。后台活动的可用选项可以阅读here,但正如我所说,您在这里的内容不会通过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    相关资源
    最近更新 更多