关于iOS后台执行

转载 2015年11月19日 09:35:03

原帖地址

1.默认创建的工程,Application does not run in background默认为NO(疑), 此时的application.backgroundTimeRemaining是10,其实是9.9.然后APP在PAD上面进入后台后会挂起,然后从后台切换到前台后APP会重新激活。****问题,既然是backgroundTimeRemaining是10,为什么在后台没有运行?要切换到前台才运行?是不是因为没有添加后台的处理代码?

2.**info.plist里面添加Application does not run in background字段,此时的默认值NO,此时的application.backgroundTimeRemaining还是10,现象还是和上面的一样,进入后台会挂起,从后台切换到前台会重新激活。

3.如果Application does not run in background设置为YES,打印application.backgroundTimeRemaining还是10, 但是一切入后台,XCODE调试的工程会马上停止。

4.如果保持Application does not run in background字段的值为NO,在添加UIBackgroundModes字段,是一个数组,在下面的一项string值里面填入audio, location, voip, App processes Newsstand Kit downloads, App communicates with an accessory,CoreBluetooth任意一个。比如选audio,会自动转换成对应的值App plays audio,如果填入location,会自动更正为App registers for location updates,或者直接在右侧的选择框里面进行选择,这时候如果程序没有做这方面的处理,还是不会后台执行。我们再修改一下,填入voip,此时会自动更正为App provides Voice over IP services,此时还是不会后台执行。说明如果不在applicationDidEnterBackground加入__block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:,他是不会后台执行的。

5.结合上面的分析,继续保持Application does not run in background字段的值为NO,同时在UIBackgroundModes字段中添加audio,location,voip,或者选择App processes Newsstand Kit downloads,App communicates with an accessory,App communicates using CoreBluetooth,App shares data using CoreBluetooth,总共7个,都可以开始后台执行,大概在594秒(即9.9分钟)的时候停止,与加不加相应的调用代码无关,空工程即可。

6.如果上面的代码结合使用

[[UIApplicationsharedApplication] setKeepAliveTimeout:600 handler:^{ [selfbackgroundHandler]; }];

BOOL backgroundAccepted = [[UIApplication sharedApplication] setKeepAliveTimeout:600 handler:^(void){
        [self backgroundHandler];//如果此时不再调用beginBackgroundTaskWithExpirationHandler,则只有10秒钟的后台执行时间了。
    }];
    if (backgroundAccepted) {
        NSLog(@"------------------------------Start new alive.");
    }
    [self backgroundHandler];

即在applicationDidEnterBackground加入上述代码,如果此时UIBackgroundModes不是voip,Xcode控制台会提示“Only VoIP apps can set KeepAliveTimeout”,会在9.9分钟即594秒的时候停止,挂起5秒钟左右的时间后,setKeepAliveTimeout起作用,继续执行。如果将此类功能应用在企业级APP上面,就可以实现在后台一直执行的APP。

打从这世界出现了操作系统以来,就没有过所谓真正的“多任务”。所谓多任务,无非是CPU速度够快而足以支撑极短时间内在多个进程内动作罢了。而所谓的“单任务”,无非是只能让当前任务独享资源罢了。
简单来说,iOS 4 app类型可以分为三种:
1. 保存现场。按下Home键10秒内直接杀死进程,并释放内存。
2. iOS支持的“多任务”。按下Home键转入多任务状态,保留在内存中,但只能系统允许的动作:比如GPS,比如VoIP,比如Streaming Music等等。
3. 真正的桌面级别的多任务。只有Safari/Mail是,苹果嫡系大都都不是。这个级别的app在后台没有任何限制动作。
无限制动作的程序,一会在用户无察觉的情况下耗光电力,二会有安全上面的问题(君还记得那些个在后台依旧默默发送你的个人消息程序吗?)
顺便提一句,后两种占用内存的app,也会在任意时间从内存中被砍掉,取决于你是否动用了其它app而导致内存不足。
真正不会被砍掉的后台,只有苹果那个通知系统。

iOS 应用进入后台后,如何短暂的执行一个任务

iOS 应用进入后台后短暂的实现任务在开发中,我们难免会碰到应用程序进入后台后,但是我们任然要执行一些任务。比如保存一个文件,跳到第三方分享的时候处理一些任务,发送一些请求什么的。但是应用进入后台后不...

ios后台执行任务详解

在IOS后台执行是本文要介绍的内容,大多数应用程序进入后台状态不久后转入暂停状态。在这种状态下,应用程序不执行任何代码,并有可能在任意时候从内存中删除。应用程序提供特定的服务,用户可以请求后台执行时间...
  • longzs
  • longzs
  • 2012年06月05日 19:13
  • 5621

IOS 后台执行代码(voip socket) .

转载自:http://blog.sina.com.cn/s/blog_000028810100wa8x.html 如何使应用被切到后台,应用中的网络连接仍然接收数据并维持存活(像QQ iph...

IOS 后台执行

在IOS后台执行是本文要介绍的内容,大多数应用程序进入后台状态不久后转入暂停状态。在这种状态下,应用程序不执行任何代码,并有可能在任意时候从内存中删除。应用程序提供特定的服务,用户可以请求后台执行时间...
  • yuanya
  • yuanya
  • 2014年04月08日 17:52
  • 332

IOS 后台执行代码(voip socket)

IOS 后台执行代码(voip socket) (2011-08-23 16:06:36) 转载▼ 如何使应用被切到后台,应用中的网络连接仍然接收数据并维持存活(像QQ iphone 一样)...
  • fuckon
  • fuckon
  • 2013年10月10日 20:02
  • 568

iOS百度地图SDK之实时绘制轨迹(后台仍执行)

首先,对于百度地图SDK的配置和环境搭建就不做说明,需要的人可以到这里查看 http://blog.csdn.net/nineteen_/article/details/47617167 ,本文的重点...

IOS在后台每隔一段时间执行一下 资料1

如果你的应用程序需要在设备休眠的时候还能够收到服务器端发送的消息,那我们就可以借助VOIP的模式来实现这一需求。但是如果的应用程序并不是正真的VOIP应用,那当你把你的应用提交到AppStore的时候...

IOS 后台执行代码(voip socket)

如何使应用被切到后台,应用中的网络连接仍然接收数据并维持存活(像QQ iphone 一样); 其实按 IOS官方文档一步一步做就可以实现上述功能; 这里主要说一下我按文档遇到的问题,以及将原来的C...
  • jmulxg
  • jmulxg
  • 2012年11月16日 15:27
  • 4733

iOS百度地图SDK之实时绘制轨迹(后台仍执行)

首先,对于百度地图SDK的配置和环境搭建就不做说明,需要的人可以博客中另一篇文章看 《iOS百度地图SDK基本使用》 ,本文的重点在于实现实时绘制轨迹的功能,并且对细节进行处理和优化 1、在...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于iOS后台执行
举报原因:
原因补充:

(最多只允许输入30个字)