後臺執行
裝置執行的五種狀態
Not running 程式未啟動 或者已經被殺死
Inactive 當前應用正在前臺執行,但是並不接收事件 中途過渡會短暫停留在此狀態。唯一在此狀態停留時間比較長的情況是:當使用者鎖屏時,或者系統提示使用者去響應某些(諸如電話來電、有未讀簡訊等)事件的時候
Active 當前應用正在前臺執行,並且接收事件 即App線上
Suspended 應用處在後臺,並且已停止執行程式碼 另一稱呼為掛起狀態,APP依然處在系統記憶體中,當系統發出低記憶體警告時,會殺死這個程式以保證其他的前臺應用正常執行,我們要做的也就是防止app被掛起 從而能夠進入後臺模式
Background 應用處在後臺,並且還在執行程式碼。一般的應用,會在此狀態停留10分鐘, 而iOS為了在某些情況下提供更好的體驗,提供了一些選項,滿足這些選項就可以在後臺執行很長一段時間
應用程式生命週期
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"\n ===> 程式啟動 !");
return YES;
}
// 當有電話進來或者鎖屏,這時你的應用程會掛起 你可以重寫這個方法,做掛起前的工作,比如關閉網路,儲存資料
// 遊戲應該用這個方法暫停遊戲
- (void)applicationWillResignActive:(UIApplication *)application {
NSLog(@"\n ===> 程式暫行 !");
}
/*
用這個方法來釋放共享資源,儲存使用者資料,銷燬計時器,並儲存足夠的應用程式狀態資訊來恢復您的應用程式的當前狀態
如果您的應用程式支援後臺執行,這種方法被稱為替代applicationWillTerminate:當使用者退出
*/
- (void)applicationDidEnterBackground:(UIApplication *)application {
NSLog(@"\n ===> 程式進入後臺 !");
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
NSLog(@"\n ===> 程式進入前臺 !");
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
NSLog(@"\n ===> 程式重新啟用 !");
}
/*
當使用者按下按鈕,或者關機,程式都會被終止。當一個程式將要正常終止時會呼叫 applicationWillTerminate 方法。但是如果長主按鈕強制退出,則不會呼叫該方法。這個方法該執行剩下的清理工作,比如所有的連線都能正常關閉,並在程式退出前執行任何其他的必要的工作
殺死程式
*/
- (void)applicationWillTerminate:(UIApplication *)application {
NSLog(@"\n ===> 程式被kill!");
}
向系統借10分鐘後臺執行時間
1.借條
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
/**
* 借條
*/
@property (nonatomic, unsafe_unretained)UIBackgroundTaskIdentifier backgroundTaskIdentifier;
@end
2.10分鐘內需要做的事
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if ([self isMultitaskingSupported]) {
self.myTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(print) userInfo:nil repeats:YES];
NSLog(@"\n ===> 程式啟動 !");
}
return YES;
}
- (void)print
{
NSLog(@"更新時間");
}
3.時間到了之後應該做的事
- (void)applicationDidEnterBackground:(UIApplication *)application {
NSLog(@"\n ===> 程式進入後臺 !");
self.backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^{
// 當應用程式留給後臺的時間快要到結束時 這個Block塊將被執行
[self endBackgroundTask];
}];
}
- (void) endBackgroundTask{
dispatch_queue_t mainQueue = dispatch_get_main_queue();
AppDelegate *weakSelf = self;
dispatch_async(mainQueue, ^(void) {
AppDelegate *strongSelf = weakSelf;
if (strongSelf != nil)
{
[strongSelf.myTimer invalidate];// 停止定時器
// 標記指定的後臺任務完成
[[UIApplication sharedApplication]endBackgroundTask:self.backgroundTaskIdentifier];
// 銷燬後臺任務識別符號
strongSelf.backgroundTaskIdentifier = UIBackgroundTaskInvalid;
}
});
}
相關文章
- Linux後臺執行Linux
- shell後臺執行
- 執行python指令碼後臺執行Python指令碼
- Linux 後臺執行命令Linux
- 後臺執行緒(daemon)執行緒
- jenkins後臺程式執行Jenkins
- Linux 下後臺執行和按照守護程式方式後臺執行的坑Linux
- windows的nohup後臺執行Windows
- Linux jar包 後臺執行LinuxJAR
- Linux nohup:後臺不掛起命令(後臺執行命令)Linux
- [linux] 使用Screen後臺執行命令Linux
- 使用screen後臺執行任務
- mysql後臺執行緒詳解MySql執行緒
- Linux程式後臺執行實踐Linux
- 後臺執行SQL語句(oracle)SQLOracle
- 讓.py程式後臺執行(Linux)Linux
- Mac Redis 服務後臺執行MacRedis
- Linux 後臺執行 PHP 指令碼LinuxPHP指令碼
- 將程式在後臺執行和殺掉後臺的程式
- linux後臺執行和關閉、檢視後臺任務Linux
- Golang 啟停管理及後臺執行Golang
- php後臺定時執行任務PHP
- XYHCMS 3.6 後臺程式碼執行漏洞
- flutter 寫後臺系統,執行到windowsFlutterWindows
- java -jar 在後臺執行和關閉JavaJAR
- 批處理檔案 bat 後臺執行BAT
- 如何使用WorkManager執行後臺任務(上)
- Linux scp 後臺執行傳輸檔案Linux
- linux後臺執行命令:&與nohup的用法Linux
- ionic3最小化並且監控到前臺執行和後臺執行
- scp 手動輸入密碼後後臺執行的方法密碼
- nohup在後臺常駐執行php指令碼PHP指令碼
- 例項後臺執行訓練或任務
- windows bat指令碼 後臺執行目標exeWindowsBAT指令碼
- MySQL 配置後臺InnoDB I/O執行緒數MySql執行緒
- Jenkins踩坑之旅:nohup後臺執行shell命令Jenkins
- Springboot 在 Linux 中打包 Jar 包在後臺執行Spring BootLinuxJAR
- ubuntu16安裝Django + nginx後臺執行UbuntuDjangoNginx
- 大資料開發-linux後臺執行,關閉,檢視後臺任務大資料Linux