iOS 如何让一个程序在后台运行不被挂起,不死掉

http://blog.csdn.net/u013756604/article/details/54967711
苹果后台运行的原理
如何解决
代码实现

苹果后台运行的原理
大家都知道,当一个程序进入后台时,除了一些特定的操作比如用户的音频,定位等能够在info.plist里修改设置进行后台操作以外,其他的很难能够进行获取,比如下载一个东西,就比如我们知道的某视频播放器(这里为了排除广告嫌疑,不进行提名)也不能完成后台挂起状态的缓存,我个人觉得这点优化的不是很好。有的人应该知道苹果哪怕后台挂起一个东西,在appdelegate 里进入后台执行的方法,也只能存活600s。 进入后台执行的代理方法是

- (void)applicationDidEnterBackground:(UIApplication *)application{}

我们可以在这个代理方法里进行一些后台执行的操作,但是只有600s 的存活时间。
如何解决
假如在appdelegate的代理方法里开启一个后台任务

- (void)applicationDidEnterBackground:(UIApplication *)application{ 
//开启一个后台任务 
  taskId = [application beginBackgroundTaskWithExpirationHandler:^{ }]; 
}
//下面是声明的任务IDUIBackgroundTaskIdentifier taskId;

在任务结束的时候会回调block,所以也就是说600s 以后会回调。我们需要做的就是在程序还未进行到600s 还未死掉的时候进行一个结束程序,新建一个后台程序的操作,这样以来程序就能无止境的在后台进行运行,你可以做一系列的操作。下面废话不多说,我把写的一个Demo的例子粘在下面,请大家参考,有不懂得可以提问。

//进入后台模式的代理
UIBackgroundTaskIdentifier taskId;
- (void)applicationDidEnterBackground:(UIApplication *)application{
//开启一个后台任务 
taskId = [application beginBackgroundTaskWithExpirationHandler:^{ 
//结束指定的任务
[application endBackgroundTask:taskId]; }]; 
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES]; 
}

//定时器的方法
- (void)timerAction:(NSTimer *)timer { count++; if (count % 500 == 0) { 
  UIApplication *application = [UIApplication sharedApplication]; 
//结束旧的后台任务 
[application endBackgroundTask:taskId]; 
//开启一个新的后台 
taskId = [application beginBackgroundTaskWithExpirationHandler:NULL]; 
  } 
NSLog(@"%d",count);
}

其实很简单,这个demo就是给一个定时器让它一直打印,如果不来回关闭任务创建任务程序会在600s 以后死掉,但是做此操作之后程序就会一直在后台执行。 PS:写在Appdelegate里面不要忘了给self.window 一个rootViewController.
希望可以帮到需要的人,第一次写博客,有什么不足的地方希望大家及时指出,也希望大家多多支持。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最近新开一个项目,要使用WebSocket 在后台保持连接。大家都知道,在iOS平台上,由于苹果的后台机制,会有以...
    蜗牛锅阅读 6,092评论 2 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,859评论 18 139
  • 文档app在后台时会被暂停,暂停的apps会提高电池的使用寿命,并且会让系统将重要的系统资源投入到引起用户注意的前...
    zziazm阅读 4,686评论 0 5
  • 自从古老的iOS4以来,当用户点击home建的时候,你可以使你的APP们在内存中处于suspended(挂起)状态...
    木易林1阅读 3,210评论 1 4
  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 3,705评论 2 7