首页 > 代码库 > iOS 项目一直在后台运行

iOS 项目一直在后台运行

我后来是这么解决不知道行不行,可以长期的在后台运行
首先我在xx-info.plist 里的 "Required background modes" 里加入"App provides Voice over IP services"

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


UIBackgroundTaskIdentifier backgroundTaskIdentifier;
02UIBackgroundTaskIdentifier 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 项目一直在后台运行