淺談iOS中的程式的五種狀態
1、程式的五種狀態
Not Running:未執行。
Inactive:前臺非活動狀態。處於前臺,但是不能接受事件處理。
Active:前臺活動狀態。處於前臺,能接受事件處理。
Background:後臺狀態。進入後臺,如果又可執行程式碼,會執行程式碼,程式碼執行完畢,程式進行掛起。
Suspended:掛起狀態。進入後臺,不能執行程式碼,如果記憶體不足,程式會被殺死。
3、AppDelegate中的回撥方法和通知
(1)回撥方法:application:didFinishLaunchingWithOptions:
本地通知:UIApplicationDidFinishLaunchingNotification
觸發時機:程式啟動並進行初始化的時候後。
適宜操作:這個階段應該進行根檢視的建立。
(2)回撥方法:applicationDidBecomeActive:
本地通知:UIApplicationDidBecomeActiveNotification
觸發時機:程式進入前臺並處於活動狀態時呼叫。
適宜操作:這個階段應該恢復UI狀態(例如遊戲狀態)。
(3)回撥方法:applicationWillResignActive:
本地通知:UIApplicationWillResignActiveNotification
觸發時機:從活動狀態進入非活動狀態。
適宜操作:這個階段應該儲存UI狀態(例如遊戲狀態)。
(4)回撥方法:applicationDidEnterBackground:
本地通知:UIApplicationDidEnterBackgroundNotification
觸發時機:程式進入後臺時呼叫。
適宜操作:這個階段應該儲存使用者資料,釋放一些資源(例如釋放資料庫資源)。
(5)回撥方法:applicationWillEnterForeground:
本地通知:UIApplicationWillEnterForegroundNotification
觸發時機:程式進入前臺,但是還沒有處於活動狀態時呼叫。
適宜操作:這個階段應該恢復使用者資料。
(6)回撥方法:applicationWillTerminate:
本地通知:UIApplicationWillTerminateNotification
觸發時機:程式被殺死時呼叫。
適宜操作:這個階段應該進行釋放一些資源和儲存使用者資料。
4、程式啟動
點選應用圖示時,會經歷三個狀態:
Not running-->Inactive-->Active
Not running --> Inactive
呼叫 application:didFinishLaunchingWithOptions: 傳送:UIApplicationDidFinishLaunchingNotification
Inactive-->Active
呼叫 applicationDidBecomeActive: 傳送:UIApplicationDidBecomeActiveNotification
5、程式Home
根據info.plist中Application does not run in background / UIApplicationExitsOnSuspend控制似乎否可以在後臺執行或掛起。
如果可以在後臺執行或者掛起會經歷
Active-->Inactive-->Background-->Suspended
Active-->Inactive
呼叫 applicationWillResignActive: 傳送:UIApplicationWillResignActiveNotification
Background-->Suspended
呼叫 applicationDidEnterBackground: 傳送:UIApplicationDidEnterBackgroundNotification
如果不可以後臺執行或掛起會經歷
Active-->Inactive-->Background-->Suspended-->Not Running
Background-->Suspended
呼叫 applicationDidEnterBackground: 傳送:UIApplicationDidEnterBackgroundNotification
Suspended-->Not Running
呼叫 applicationWillTerminate: 傳送:UIApplicationWillTerminateNotification
6、掛起後,重新執行
Suspended-->Background-->Inactive-->Active
Background-->Inactive
呼叫 applicationWillEnterForeground: 傳送:UIApplicationWillEnterForegroundNotification
Inactive-->Active
呼叫 applicationDidBecomeActive: 傳送:UIApplicationDidBecomeActiveNotification
7、記憶體不足,殺死程式
Background-->Suspended-->Not running
這種情況不會呼叫任何方法,也不會傳送任何通知。
相關文章
- 淺談前端的狀態管理,以及anguar的狀態管理庫前端
- 淺談前端狀態管理前端
- 程式的3種狀態
- 淺談UML中類之間的五種關係及其在程式碼中的表現形式
- 淺談iOS常用的幾種傳值方式iOS
- 處理物件的多種狀態及其相互轉換——狀態模式(五)物件模式
- 淺談 iOS 中的檢視優化iOS優化
- css中按鈕的四種狀態CSS
- 淺談 PHP 中的多種加密技術及程式碼示例PHP加密
- Linux 程式狀態淺析Linux
- 淺談低程式碼開發的五個優勢
- iOS模擬各種網路狀態iOS
- 淺談 iOS Device ID 的修改iOSdev
- Redux複雜應用(一):淺談狀態管理Redux
- React中的另一種狀態管理方案ValtioReact
- hibernate中po物件的三種狀態分析物件
- Oracle LISTENER 中各種狀態資訊的含義Oracle
- 淺談JavaScript中的thisJavaScript
- 執行緒池的五種狀態及建立執行緒池的幾種方式執行緒
- 淺談mysql中各種表空間(tablespaces)的概念MySql
- 淺談SQL Server中的三種物理連線操作SQLServer
- 好用的Vue狀態管理模式:淺談Vuet在實際應用中解決的問題Vue模式
- iOS 狀態列的圖示iOS
- 淺談 Java執行緒狀態轉換及控制Java執行緒
- 淺談TCP(1):狀態機與重傳機制TCP
- 五種查詢Internet連線狀態[含IP]的方法 (轉)
- iOS 淺談 RunloopiOSOOP
- 淺談KVO, iOS的開發之旅iOS
- 5種狀況下的HTTP狀態碼HTTP
- 淺談 OI 中各種合併操作
- [譯] iOS 響應式程式設計:Swift 中的輕量級狀態容器iOS程式設計Swift
- 淺談java中的反射Java反射
- 淺談react 中的 this 指向React
- 淺談Java中的HashmapJavaHashMap
- 淺談React中的diffReact
- 淺談JavaScript中的介面JavaScript
- [譯] Flutter 中的原生應用程式狀態Flutter
- java執行緒的五大狀態,阻塞狀態詳解Java執行緒