我后来是这么解决不知道行不行,能够长期的在后台执行

首先我在xx-info.plist 里的 "Required background modes" 里增加"App provides Voice over IP services"

然后在delegate里增加下面代码,原理是进入后台时程序会在600秒那样结束任务,我做的就是在结束任务前新开一个任务。再结束旧任务,这样就一直的在后台执行,希望可能帮助到很多其它的人。我也查了非常久才找到这种方法的。

UIBackgroundTaskIdentifier
backgroundTaskIdentifier;
02 UIBackgroundTaskIdentifier
oldBackgroundTaskIdentifier;
03  
04 -
(BOOL) isMultitaskingSupported{
05      
06     BOOL
result = NO;
07      
08     if ([[UIDevice
currentDevice]
09           
10          respondsToSelector:@selector(isMultitaskingSupported)]){
result = [[UIDevice currentDevice] isMultitaskingSupported];
11          
12     }
13      
14     return result;
15      
16 }
17  
18 -
(
void)
timerMethod:(NSTimer *)paramSender{
19     count++;
20     if (count
% 500 == 0) {       
21         UIApplication
*application = [UIApplication sharedApplication];
22          
23         //开启一个新的后台
24          
25         backgroundTaskIdentifier
= [application beginBackgroundTaskWithExpirationHandler:^{
26    
27         }];
28         //结束旧的后台任务
29         [application
endBackgroundTask:backgroundTaskIdentifier];
30         oldBackgroundTaskIdentifier
= backgroundTaskIdentifier;
31     }
32     NSLog(@"%ld",count);
33 }
34 -
(
void)applicationDidEnterBackground:(UIApplication
*)application
35 {
36     if ([self
isMultitaskingSupported] == NO){
37          
38         return;
}
39     //开启一个后台任务
40      
41     backgroundTaskIdentifier
= [application beginBackgroundTaskWithExpirationHandler:^{       
42     }];
43     oldBackgroundTaskIdentifier
= backgroundTaskIdentifier;
44     if ([self.myTimer
isValid]) {
45         [self.myTimer
invalidate];
46     }
47     self.myTimer
= [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerMethod:) userInfo:nil repeats:YES];
48 }
49  
50 -
(
void)applicationWillEnterForeground:(UIApplication
*)application
51 {
52     if (backgroundTaskIdentifier
!= UIBackgroundTaskInvalid){
53         [application
endBackgroundTask:backgroundTaskIdentifier];
54         if ([self.myTimer
isValid]) {
55             [self.myTimer
invalidate];
56         }
57     }
58 }
59  
60 -
(
void)applicationWillEnterForeground:(UIApplication
*)application
61 {
62     if (backgroundTaskIdentifier
!= UIBackgroundTaskInvalid){
63         [application
endBackgroundTask:backgroundTaskIdentifier];
64         if ([self.myTimer
isValid]) {
65             [self.myTimer
invalidate];
66         }
67     }
68 }

最新文章

  1. IOS7开发~Xcode5制作framework
  2. HBase保存的各个字段意义解释
  3. SQL你必须知道的-增删改查与约束
  4. python 重载 __hash__ __eq__
  5. FastDFS问题汇总
  6. 0118——UILabel和导入字体
  7. JDK自带工具jps,jstat,jmap,jconsole使用
  8. 使用PHP把下划线分隔命名的字符串 转换成驼峰式命名方式 , 把下划线后面的第一个字母变成大写
  9. fastboot完成自己主动命令
  10. bzoj4819 [Sdoi2017]新生舞会
  11. 一次和matplotlib和numpy的初识及简单的异常值清理
  12. [python爬虫]Requests-BeautifulSoup-Re库方案--Requests库介绍
  13. 使用SQL查看表字段和字段说明
  14. Nginx 安装配置教程
  15. lumen之composer自动加载
  16. MariaDB学习记录
  17. php登陆绑定手机验证码使用阿里大于接口
  18. Django admin后台操作
  19. 在创建一个MVC控制器,显示运行所选代码生成器时出错(带读写,使用EF)
  20. python正则的使用

热门文章

  1. 从xtrabackup备份恢复单表【转】
  2. spring动态加载(刷新)配置文件 [复制链接]
  3. http://blog.csdn.net/u011001723/article/details/45621027
  4. python 列表元组加减乘除法
  5. 几个比较实用的CSS
  6. DDD领域模型企业级系统Unity(五)
  7. intelliJ 打包jar的多种方式
  8. java8中ConcurrentHashMap
  9. JavaScript中变量的相互引用
  10. doc文档生成带目录的pdf文件方法