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

首先我在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 }

iOS 项目一直在后台执行的更多相关文章

  1. IOS 后台执行

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

  2. IOS后台执行机制 与 动作

    当用户按下"Home"键或者系统启动另外一个应用时,前台foreground应用首先切换到Inactive状态,然后切换到Background状态.此转换将会导致先后调用应用代理的 ...

  3. IOS 后台执行 播放音乐

    iOS 4開始引入的multitask.我们能够实现像ipod程序那样在后台播放音频了. 假设音频操作是用苹果官方的AVFoundation.framework实现.像用AvAudioPlayer.A ...

  4. IOS后台执行

    大多数应用程序进入后台状态不久后转入暂停状态.在这种状态下,应用程序不执行任何代码,并有可能在任意时候从内存中删除.应用程序提供特定的服务,用户可以请求后台执行时间,以提供这些服务. 判断是否支持多线 ...

  5. IOS开发之----详解在IOS后台执行

    文一 我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后台运行一小段时间. 还有三种类型的可以运行在后以,1.音乐2.location 3.voip 文二 ...

  6. IOS的后台执行

    写在前面给大家推荐一个不错的站点  www.joblai.com 本文章由央广传媒开发部 冯宝瑞整理.哈哈 http://www.cocoachina.com/bbs/read.php? tid=14 ...

  7. ios项目里扒出来的json文件

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...

  8. iOS项目开发实战——通过Http Get方式与server通信

    移动client往往须要同后台server进行通信,上传或者下载数据,最经常使用到的方式就是Http Get,如今我们来学习在iOS项目中使用Get方式同server进行通信. [一]server端实 ...

  9. iOS项目Info.plist中关键字汇总

    1. Application does not run in background (键名:UIApplicationExistsOnSuspend) 自从iOS4.0之后,当你在应用程序执行的时候按 ...

随机推荐

  1. 初步认识mitmproxy(一)

    在windows机器上,经常用的最多的是fiddler工具,很强大,图形化界面,使用方便.简单:在mac上,Charles 类似fiddler工具,同样是易于操作的图形化界面,同样都是通过代理的方式实 ...

  2. node.js模块、包

    创建模块 Node.js 提供了 exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对 ...

  3. java 捕获所有异常

    1.) 通过捕获异常类型的基类Exception就可以处理所有类型的异常.(事实上还有其它的基类,但Exception是同编程活动相关的基类) 2.)因为Exception是与编程有关的所有异常类的基 ...

  4. C#解除文件锁定

    public static void StreamsFile(string fi) { try { var p = new Process { StartInfo = { FileName = Env ...

  5. LOJ 10127 -「一本通 4.3 练习 1」最大数

    题面 题目描述 给定一个正整数数列 $a_1, a_2, a_3, \dots , a_n$,每一个数都在 0~p-1之间.可以对这列数进行两种操作: 添加操作:向序列后添加一个数,序列长度变成 n+ ...

  6. IntelliJ IDEA快捷键:Ctrl+空格

    The Code Completion feature lets you quickly complete different kinds of statements in  the code.For ...

  7. hadoop2.5搭建过程

    1 搭建环境所使用的资源 VMware Workstation 9 ubuntu-14.04.2-desktop-amd64.iso jdk-7u80-linux-x64.tar.gz hadoop- ...

  8. VisualSVN Server搭建SVN服务器<转>

    使用 VisualSVN Server来搭建本地的代码管理库是非常方便的.svn的那些“检查修改”.“代码版本自由回滚”.“版本日志”等等很多比较牛逼的功能. 在开发当中可谓是理想的开发助手.而且人脑 ...

  9. zookeeper集群自动启动脚本

    定义脚本boot.sh启动zookeeper集群(hadoop1,hadoop2,hadoop3) #!/bin/bash echo "start zkServer..." do ...

  10. .NET工作准备--01前言

    01应聘须知(已过时) -1.了解软件开发大环境.-2.准备简历:不宜超过一页,永远准备中文,模板. -3.渠道:3大网站,中华英才,前程无忧(51job最给力),智联招聘.现在还有猎聘网和100程序 ...