Android AlarmManager 的 iOS 替代品 [关闭]
Posted
技术标签:
【中文标题】Android AlarmManager 的 iOS 替代品 [关闭]【英文标题】:iOS alternative for Android AlarmManager [closed] 【发布时间】:2016-06-26 20:58:02 【问题描述】:什么是 ios Swift 2 替代 android AlarmManager。
到目前为止,我发现关闭的东西是 NSTimer。但这仅在您的应用程序启动时才有效,一旦进入后台它将无法工作,我需要在后台运行一些功能并从我的业务逻辑中决定我是否想做某事......例如,如果满足某些条件以显示本地通知。
编辑
对于那些有同样问题的人来说,简单的答案在 iOS 上是没有的。
唯一的解决方法是使用远程推送通知(静默通知)来唤醒应用程序,然后您可以从那里实现您的业务逻辑。
*重要提示
从我在几个地方发现的情况来看,人们抱怨使用静默通知来执行此操作,因为您的应用程序可能会在应用商店被拒绝。
如果有人在应用商店中为他的应用使用这种方法,请分享您的经验。
【问题讨论】:
你需要运行什么函数?它是计时器、if 语句还是位置?查询? iOS 应用有no real 后台服务。请重新考虑您的逻辑,以便您不需要在后台执行此操作。 您使用的标签不适用于这个问题。请查看What are tags, and how should I use them? @SmokeDispenser,我无法重新思考我的逻辑,因为这是我在应用程序中需要的。 正如@SmokeDispenser 所述,iOS 不允许让您像 Android 一样在后台运行活动进程。您将需要找到不同的方法。 【参考方案1】:没有。
正如 cmets 中所述,the documenation 对此非常清楚:
始终尽量避免执行任何后台工作,除非这样做可以改善整体用户体验。应用程序可能会因为用户启动了不同的应用程序或者因为用户锁定了设备并且现在没有使用它而移动到后台。在这两种情况下,用户都在发出信号,表明您的应用现在不需要做任何有意义的工作。
以下情况除外:
对于需要更多执行时间来执行的任务,您必须请求特定权限才能在后台运行它们而不会被暂停。在 iOS 中,只允许特定的应用类型在后台运行:
在后台向用户播放可听内容的应用,例如音乐播放器应用
在后台录制音频内容的应用
让用户随时了解其位置的应用,例如导航应用
支持互联网协议语音 (VoIP) 的应用
需要定期下载和处理新内容的应用
从外部配件接收定期更新的应用
【讨论】:
那么这部分怎么样:“......除非这样做可以改善整体用户体验。”因此,如果您有一些自动化流程可以帮助用户代表用户做某事,并在确实需要通知用户时通知用户,他们阻止了这种情况,但您仍然可以实现推送通知(例如 Skype 消息传递或其他)。好的,所以如果没有适当的方法将 AlarmManager 转换为 iOS,那么有什么替代解决方法来实现尽可能多的类似行为? 我想我的编辑,没什么好说的了。无法在后台可靠地运行长时间运行的任务。甚至推送通知(在服务器上进行计时并发送推送事件)也无法及时可靠地传递到设备。【参考方案2】:没有确切的等价物。请阅读:https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html
相关部分:
对于需要更多执行时间来执行的任务,您必须请求特定权限才能在后台运行它们而不会被暂停。在 iOS 中,只允许特定的应用类型在后台运行:
在后台向用户播放有声内容的应用,例如音乐播放器应用 在后台录制音频内容的应用 让用户随时了解其位置的应用,例如导航应用 支持互联网协议语音 (VoIP) 的应用 需要定期下载和处理新内容的应用 从外部附件接收定期更新的应用实现这些服务的应用必须声明它们支持的服务并使用系统框架来实现这些服务的相关方面。声明服务可以让系统知道您使用了哪些服务,但在某些情况下,实际上是系统框架阻止了您的应用程序被挂起。
如果您尝试调用的函数执行上述任一操作,文档将说明如何使用后台任务或其他方法来完成此操作。
【讨论】:
以上是关于Android AlarmManager 的 iOS 替代品 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
android app被杀死 alarmmanager能不能唤醒