首页 > 代码库 > iOS 项目一直在后台运行
iOS 项目一直在后台运行
我后来是这么解决不知道行不行,可以长期的在后台运行
首先我在xx-info.plist 里的 "Required background modes" 里加入"App provides Voice over IP services"
首先我在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 项目一直在后台运行
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。