iOS 項目一直在後臺運行 – iPhone手機開發技術文章 iPhone軟體開發教學課程

我後來是這麼解決不知道行不行,可以長期的在後臺運行
首先我在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 }

發佈留言