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 |
} |
相關文章
- 如何讓Android的service一直在後臺執行?Android
- iOS-OC-APP後臺持續執行iOSAPP
- 後臺執行
- 批處理檔案 bat 後臺執行BAT
- shell後臺執行
- 後臺執行MongoDBMongoDB
- 後臺執行以及保持程式在後臺長時間執行
- Linux scp 後臺執行傳輸檔案Linux
- 使用Supervisor讓你的Swift Perfect伺服器專案後臺執行Swift伺服器
- Linux後臺執行Linux
- 後臺執行緒(daemon)執行緒
- windows redis 後臺執行WindowsRedis
- Jboss 後臺執行模式模式
- 指令碼後臺執行指令碼
- scp 在後臺執行
- 執行python指令碼後臺執行Python指令碼
- iOS 檢視及匯出專案執行日誌iOS
- flutter專案安裝nfc_manager後專案執行不起來Flutter
- GAT專案前臺到後臺
- linux程式前臺-後臺執行Linux
- Linux 後臺執行命令Linux
- jenkins後臺程式執行Jenkins
- linux命令後臺執行Linux
- linux後臺執行-nohupLinux
- 作業控制(後臺執行)
- windows的nohup後臺執行Windows
- Linux 下後臺執行和按照守護程式方式後臺執行的坑Linux
- java--多執行緒之後臺執行緒Java執行緒
- vue 專案打包之後的檔案執行之 http-serveVueHTTP
- mysql後臺執行緒詳解MySql執行緒
- Mac Redis 服務後臺執行MacRedis
- Linux jar包 後臺執行LinuxJAR
- 後臺執行SQL語句(oracle)SQLOracle
- Linux 命令的後臺執行Linux
- Android Oreo 後臺執行限制Android
- python指令碼後臺執行Python指令碼
- 後臺執行主要T-CODE
- run sql in the backgroud 後臺執行sqlSQL