你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> iOS 項目一直在後台運行

iOS 項目一直在後台運行

編輯:關於IOS

我後來是這麼解決不知道行不行,可以長期的在後台運行
首先我在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. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved