iOS:保持应用程序像服务一样运行 - 代码日志

iOS:保持应用程序像服务一样运行

在iOS中,我如何指示操作系统保持我的应用程序运行,即使它不再在前台?

> Skype
> Viber
> Empatica
> Zenly

还有更多的应用程序可以做到这一点。

基本上在iOS中没有这样的服务类型的应用程序或功能。
即使是“背景”应用程序(UIBackgroundMode)也不能完全自由运行,没有其他操作系统上的服务或守护程序等限制。

以下是后台执行和通知和计时器等的情况。

1)应用程序无法在后台执行,除非:

a)它需要额外的时间从操作系统这样做。这是使用beginBackgroundTaskWithExpirationHandler完成的。苹果没有指定(有意)这个额外的时间是多久,但实际上大概是10分钟。

b)应用程序有背景模式,模式有:voip,audio,location,newstand。即使它具有这些类型之一,应用程序也无法执行无限制。本讨论的其余部分假定应用程序没有后台模式。如果您尝试使用这些背景模式之一,使您的应用程序能够在后台运行,但是您的应用程序无法正确使用特定功能,那么您的应用程序将在应用程序商店提交时被拒绝(即具有UIBackgroundMode它必须是:一个voip应用程序,需要持续的位置更新,连续播放音频的能力是一个基本功能,或者是一个新的应用程序)。

2)当应用程序暂停时,无法直接唤醒自己。它以前不能安排一个NSTimer,它不能使用像performSelector这样的东西:afterDelay。等等

应用程序可以再次活动的唯一方法是,如果用户使用某种功能使其处于活动状态。用户可以通过以下方式执行此操作:

a)直接从其图标启动应用程序

b)启动该应用程序以响应应用程序以前计划的本地通知,该应用程序处于活动状态。

c)启动应用程序以响应服务器发送的远程通知。

d)其他几个:如果应用程序已注册处理通过url启动的URL启动;或者如果其注册能够处理某种类型的内容。

如果应用程序在本地/远程通知触发时处于前台,则应用程序将直接接收。

如果当本地/远程通知触发时应用程序当前不在前台,那么应用程序不会接收到该应用程序。当通知发生时,没有执行的代码!

只有当用户选择通知时,该应用才会被激活并且可以执行。

请注意,用户可以针对整个设备或仅针对特定应用程序禁用通知,在这种情况下,用户将永远不会看到它们。如果在通知发生火灾时设备已关闭,则丢失。

IOS 7更新

1)有一些新的背景模式,如背景提取(您仍然无法以确定性方式被操作系统激活)

2)现在有一个后台推送通知

3)beginBackgroundTaskWithExpirationHandler时间从10分钟减少到3。

http://stackoverflow.com/questions/11044095/ios-keep-an-app-running-like-a-service

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:iOS:保持应用程序像服务一样运行