自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

談?wù)凙pp應(yīng)用程序的生命周期

移動(dòng)開(kāi)發(fā) 移動(dòng)應(yīng)用
對(duì)于iOS應(yīng)用程序,關(guān)鍵的是要知道你的應(yīng)用程序是否正在前臺(tái)或后臺(tái)運(yùn)行。由于系統(tǒng)資源在iOS 設(shè)備上較為有限,一個(gè)應(yīng)用程序必須在后臺(tái)與前臺(tái)有不同的行為。操作系統(tǒng)也會(huì)限制你的應(yīng)用程序在后臺(tái)的運(yùn)行,以提高電池壽命,并提高用戶與前臺(tái)應(yīng)用程序的體 驗(yàn)。當(dāng)應(yīng)用程序在前臺(tái)和后臺(tái)之間切換時(shí),操作系統(tǒng)將會(huì)通知您的應(yīng)用程序。你可以通過(guò)這些通知來(lái)修改你的應(yīng)用程序的行為。

對(duì)于iOS應(yīng)用程序,關(guān)鍵的是要知道你的應(yīng)用程序是否正在前臺(tái)或后臺(tái)運(yùn)行。由于系統(tǒng)資源在iOS 設(shè)備上較為有限,一個(gè)應(yīng)用程序必須在后臺(tái)與前臺(tái)有不同的行為。操作系統(tǒng)也會(huì)限制你的應(yīng)用程序在后臺(tái)的運(yùn)行,以提高電池壽命,并提高用戶與前臺(tái)應(yīng)用程序的體 驗(yàn)。當(dāng)應(yīng)用程序在前臺(tái)和后臺(tái)之間切換時(shí),操作系統(tǒng)將會(huì)通知您的應(yīng)用程序。你可以通過(guò)這些通知來(lái)修改你的應(yīng)用程序的行為。

當(dāng)你的應(yīng)用程序在前臺(tái)活動(dòng)時(shí),系統(tǒng)會(huì)發(fā)送觸摸事件給它進(jìn)行處理。在UIKit的基礎(chǔ)設(shè)施做了大部分的事件傳遞給你的自定義對(duì)象工作。所有您需要做的是覆蓋在相應(yīng)的對(duì)象的方法來(lái)處理這​​些事件。對(duì)于控件,UIKit會(huì)通過(guò)處理你的觸摸事件,或者其他一些有趣的事情發(fā)生時(shí)調(diào)用您的自定義代碼,比如當(dāng)文本字段中的值更改。

1:應(yīng)用程序的狀態(tài)

Not running未運(yùn)行:程序沒(méi)啟動(dòng)。

Inactive未激活:程序在前臺(tái)運(yùn)行,不過(guò)沒(méi)有接收到事件。在沒(méi)有事件處理情況下程序通常停留在這個(gè)狀態(tài)。

Active激活:程序在前臺(tái)運(yùn)行而且接收到了事件。這也是前臺(tái)的一個(gè)正常的模式。

Backgroud后臺(tái):程序在后臺(tái)而且能執(zhí)行代碼,大多數(shù)程序進(jìn)入這個(gè)狀態(tài)后會(huì)在在這個(gè)狀態(tài)上停留一會(huì)。時(shí)間到之后會(huì)進(jìn)入掛起狀態(tài)(Suspended)。有的程序經(jīng)過(guò)特殊的請(qǐng)求后可以長(zhǎng)期處于Backgroud狀態(tài)。

Suspended掛起:程序在后臺(tái)不能執(zhí)行代碼。系統(tǒng)會(huì)自動(dòng)把程序變成這個(gè)狀態(tài)而且不會(huì)發(fā)出通知。當(dāng)掛起時(shí),程序還是停留在內(nèi)存中的,當(dāng)系統(tǒng)內(nèi)存低時(shí),系統(tǒng)就把掛起的程序清除掉,為前臺(tái)程序提供更多的內(nèi)存。

 

2:各個(gè)程序運(yùn)行狀態(tài)時(shí)代理的回調(diào)

①告訴代理進(jìn)程啟動(dòng)但還沒(méi)進(jìn)入狀態(tài)保存

1 - (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
2 {
3     NSLog(@"①告訴代理進(jìn)程啟動(dòng)但還沒(méi)進(jìn)入狀態(tài)保存");
4     return YES;
5 }

②告訴代理啟動(dòng)基本完成程序準(zhǔn)備開(kāi)始運(yùn)行

 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 2 {
 3     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
 4     
 5     NSLog(@"②告訴代理啟動(dòng)基本完成程序準(zhǔn)備開(kāi)始運(yùn)行");
 6     
 7     // Override point for customization after application launch.
 8     
 9     self.window.backgroundColor = [UIColor whiteColor];
10     [self.window makeKeyAndVisible];
11     return YES;
12 }

③當(dāng)應(yīng)用程序?qū)⒁敕腔顒?dòng)狀態(tài)執(zhí)行,在此期間,應(yīng)用程序不接收消息或事件,比如來(lái)電話

1 - (void)applicationWillResignActive:(UIApplication *)application
2 {
3     // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
4     // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
5     NSLog(@"③當(dāng)應(yīng)用程序?qū)⒁敕腔顒?dòng)狀態(tài)執(zhí)行,在此期間,應(yīng)用程序不接收消息或事件,比如來(lái)電話");
6 }

④當(dāng)應(yīng)用程序進(jìn)入活動(dòng)狀態(tài)執(zhí)行

1 - (void)applicationDidBecomeActive:(UIApplication *)application
2 {
3     // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
4     NSLog(@"④當(dāng)應(yīng)用程序進(jìn)入活動(dòng)狀態(tài)執(zhí)行");
5 }

⑤當(dāng)程序被推送到后臺(tái)的時(shí)候調(diào)用。所以要設(shè)置后臺(tái)繼續(xù)運(yùn)行,則在這個(gè)函數(shù)里面設(shè)置即可

 1 - (void)applicationDidEnterBackground:(UIApplication *)application
 2 {
 3     // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
 4     // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
 5     NSLog(@"⑤當(dāng)程序被推送到后臺(tái)的時(shí)候調(diào)用");
 6     
 7     [application beginBackgroundTaskWithExpirationHandler:^{
 8         
 9         NSLog(@"begin Background Task With Expiration Handler");
10         
11     }];
12 }

⑥當(dāng)程序從后臺(tái)將要重新回到前臺(tái)時(shí)候調(diào)用

1 - (void)applicationWillEnterForeground:(UIApplication *)application
2 {
3     // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
4     NSLog(@"⑥當(dāng)程序從后臺(tái)將要重新回到前臺(tái)時(shí)候調(diào)用");
5 }

⑦當(dāng)程序?qū)⒁顺鍪潜徽{(diào)用,通常是用來(lái)保存數(shù)據(jù)和一些退出前的清理工作。這個(gè)需要要設(shè)置UIApplicationExitsOnSuspend的鍵值

1 - (void)applicationWillTerminate:(UIApplication *)application
2 {
3     // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
4     NSLog(@"⑦當(dāng)程序?qū)⒁顺鍪潜徽{(diào)用");
5 }

⑧當(dāng)程序載入后執(zhí)行

1 - (void)applicationDidFinishLaunching:(UIApplication *)application
2 {
3     NSLog(@"⑧當(dāng)程序載入后執(zhí)行");
4 }

程序啟動(dòng)時(shí):

2014-07-01 15:55:14.706 LifeCycle[5845:60b] ①告訴代理進(jìn)程啟動(dòng)但還沒(méi)進(jìn)入狀態(tài)保存

2014-07-01 15:55:14.708 LifeCycle[5845:60b] ②告訴代理啟動(dòng)基本完成程序準(zhǔn)備開(kāi)始運(yùn)行

2014-07-01 15:55:14.709 LifeCycle[5845:60b] ④當(dāng)應(yīng)用程序進(jìn)入活動(dòng)狀態(tài)執(zhí)行

按下Home鍵返回主界面:

2014-07-01 15:56:11.756 LifeCycle[5845:60b] ③當(dāng)應(yīng)用程序?qū)⒁敕腔顒?dòng)狀態(tài)執(zhí)行

2014-07-01 15:56:11.814 LifeCycle[5845:60b] ⑤當(dāng)程序被推送到后臺(tái)的時(shí)候調(diào)用

再次打開(kāi)程序:

2014-07-01 15:57:19.200 LifeCycle[5845:60b] ⑥當(dāng)程序從后臺(tái)將要重新回到前臺(tái)時(shí)候調(diào)用

2014-07-01 15:57:19.201 LifeCycle[5845:60b] ④當(dāng)應(yīng)用程序進(jìn)入活動(dòng)狀態(tài)執(zhí)行

3:加載應(yīng)用程序進(jìn)入前臺(tái)

 

4:加載應(yīng)用程序進(jìn)入后臺(tái)

5:基于警告式響應(yīng)中斷

當(dāng)出現(xiàn)這種中斷時(shí),我們需要在- (void)applicationWillResignActive:(UIApplication *)application方法中進(jìn)行如下操作:

①停止timer 和其他周期性的任務(wù)

②停止任何正在運(yùn)行的請(qǐng)求

③暫停視頻的播放

④如果是游戲那就暫停它

⑤減少OpenGL ES的幀率

⑥掛起任何分發(fā)的隊(duì)列和不重要的操作隊(duì)列(你可以繼續(xù)處理網(wǎng)絡(luò)請(qǐng)求或其他時(shí)間敏感的后臺(tái)任務(wù))

當(dāng)程序回到active狀態(tài),我們需要在- (void)applicationDidBecomeActive:(UIApplication *)application方法中重新開(kāi)始上述任務(wù)。不過(guò)游戲要回到暫停狀態(tài),不能自動(dòng)開(kāi)始。

6:進(jìn)入后臺(tái)運(yùn)行

當(dāng)應(yīng)用程序進(jìn)入后臺(tái)時(shí),我們應(yīng)該做些什么?

保存用戶數(shù)據(jù)或狀態(tài)信息,所有沒(méi)寫(xiě)到磁盤(pán)的文件或信息,在進(jìn)入后臺(tái)時(shí),***都寫(xiě)到磁盤(pán)去,因?yàn)槌绦蚩赡茉诤笈_(tái)被殺死。

釋放盡可能釋放的內(nèi)存。

- (void)applicationDidEnterBackground:(UIApplication *)application方法有大概5秒的時(shí)間讓你完成這些任務(wù)。如果超過(guò)時(shí)間還有未完成的任務(wù),你的程序就會(huì)被終止而且從內(nèi)存中清除。

如果還需要長(zhǎng)時(shí)間的運(yùn)行任務(wù),可以在該方法中調(diào)用 

1 [application beginBackgroundTaskWithExpirationHandler:^{
2         
3         NSLog(@"begin Background Task With Expiration Handler");
4         
5     }];

應(yīng)用程序在后臺(tái)時(shí)的內(nèi)存使用:請(qǐng)求后臺(tái)運(yùn)行時(shí)間和啟動(dòng)線程來(lái)運(yùn)行長(zhǎng)時(shí)間運(yùn)行的任務(wù)。

在后臺(tái)時(shí),每個(gè)應(yīng)用程序都應(yīng)該釋放***的內(nèi)存。系統(tǒng)努力的保持更多的應(yīng)用程序在后臺(tái)同時(shí) 運(yùn)行。不過(guò)當(dāng)內(nèi)存不足時(shí),會(huì)終止一些掛起的程序來(lái)回收內(nèi)存,那些內(nèi)存***的程序首先被終止。

事實(shí)上,應(yīng)用程序應(yīng)該的對(duì)象如果不再使用了,那就應(yīng)該盡快的去掉強(qiáng)引用,這樣編譯器可以回收這些內(nèi)存。如果你想緩存一些對(duì)象提升程序的性能,你可以在進(jìn)入后臺(tái)時(shí),把這些對(duì)象去掉強(qiáng)引用。

下面這樣的對(duì)象應(yīng)該盡快的去掉強(qiáng)引用:

①圖片對(duì)象

②你可以重新加載的 大的視頻或數(shù)據(jù)文件

③任何沒(méi)用而且可以輕易創(chuàng)建的對(duì)象

在后臺(tái)時(shí),為了減少程序占用的內(nèi)存,系統(tǒng)會(huì)自動(dòng)在回收一些系統(tǒng)幫助你開(kāi)辟的內(nèi)存。比如:

①系統(tǒng)回收Core Animation的后備存儲(chǔ)。

②去掉任何系統(tǒng)引用的緩存圖片

③去掉系統(tǒng)管理數(shù)據(jù)緩存強(qiáng)引用

7:返回前臺(tái)運(yùn)行

在暫停狀態(tài)的應(yīng)用程序必須準(zhǔn)備處理任何排隊(duì)的通知時(shí),它返回到前臺(tái)或后臺(tái)執(zhí)行狀 態(tài)。暫停的應(yīng)用程序不執(zhí)行任何代碼,因此不能處理與方向的變化,時(shí)間的變化,偏好的變化,以及許多其他會(huì)影響應(yīng)用程序的外觀或狀態(tài)的通知。為了確保這些更 改不會(huì)丟失,系統(tǒng)排隊(duì)許多相關(guān)的通知,并把它們傳遞給應(yīng)用程序,只要它開(kāi)始再次執(zhí)行代碼(無(wú)論是在前景或背景)。為了防止由偏快轉(zhuǎn)為超載與它恢復(fù)時(shí)通知您 的應(yīng)用程序,該系統(tǒng)凝聚事件,并提供一個(gè)單一的通知(每個(gè)相關(guān)類型),反映了凈變化,因?yàn)槟愕膽?yīng)用程序被暫停。

8:程序終止

程序只要符合以下情況之一,只要進(jìn)入后臺(tái)或掛起狀態(tài)就會(huì)終止:

①iOS4.0以前的系統(tǒng)

②app是基于iOS4.0之前系統(tǒng)開(kāi)發(fā)的。

③設(shè)備不支持多任務(wù)

④在Info.plist文件中,程序包含了 UIApplicationExitsOnSuspend  鍵。

app如果終止了,系統(tǒng)會(huì)調(diào)用app的代理的方法 - (void)applicationWillTerminate:(UIApplication *)application,這樣可以讓你可以做一些清理工作。你可以保存一些數(shù)據(jù)或app的狀態(tài)。這個(gè)方法也有5秒鐘的限制。超時(shí)后方法會(huì)返回程序從內(nèi) 存中清除。

注意:用戶可以手工關(guān)閉應(yīng)用程序。

9:The Main Run Loop  主運(yùn)行循環(huán)

Main Run Loop負(fù)責(zé)處理用戶相關(guān)的事件。UIApplication對(duì)象在程序啟動(dòng)時(shí)啟動(dòng)main run Loop,它處理事件和更新視圖的界面??碝ain Run Loop就知道,它是運(yùn)行在程序的主線程上的。這樣保證了接收到用戶相關(guān)操作的事件是按順序處理的。 

用戶操作設(shè)備,相關(guān)的操作事件被系統(tǒng)生成并通過(guò)UIKit的指定端口分發(fā)。事件在 內(nèi)部排成隊(duì)列,一個(gè)個(gè)的分發(fā)到Main run loop 去做處理。UIApplication對(duì)象是***個(gè)接收到時(shí)間的對(duì)象,它決定事件如何被處理。觸摸事件分發(fā)到主窗口,窗口再分發(fā)到對(duì)應(yīng)出發(fā)觸摸事件的 View。其他的事件通過(guò)其他途徑分發(fā)給其他對(duì)象變量做處理。 

大部分的事件可以在你的應(yīng)用里分發(fā),類似于觸摸事件,遠(yuǎn)程操控事件(線控耳機(jī)等) 都是由app的 responder objects 對(duì)象處理的。Responder objects 在你的app里到處都是,比如:UIApplication 對(duì)象,view對(duì)象,view controller 對(duì)象,都是resopnder objects。大部分事件的目標(biāo)都指定了resopnder object,不過(guò)事件也可以傳遞給其他對(duì)象。比如,如果view對(duì)象不處理事件,可以傳給父類view或者view controller。

-------------------------------------

本文根據(jù)官方文檔整理,翻譯基本靠谷歌。

點(diǎn)擊查看英文版原文

責(zé)任編輯:閆佳明 來(lái)源: cnblogs
相關(guān)推薦

2015-07-09 15:42:48

ios應(yīng)用生命周期

2009-06-24 10:34:39

JSF生命周期JSF應(yīng)用程序

2013-07-31 14:50:32

Windows PhoWP應(yīng)用程序生命周期

2011-07-20 15:58:58

iPhone 應(yīng)用程序 生命周期

2011-08-10 16:50:10

iPhone生命周期

2013-09-26 11:20:34

Informatica

2012-05-28 15:37:20

WP程序生命周期

2014-02-24 10:50:32

DevOps云應(yīng)用

2014-09-28 11:28:02

Android應(yīng)用程序生命周期

2025-04-28 01:22:00

2023-12-21 08:00:00

ChatGPT人工智能大型語(yǔ)言模型

2010-08-01 15:29:04

AndroidDalvik

2012-08-16 09:38:38

ASP.NET

2010-04-02 09:02:02

ASP.NET MVC

2012-06-20 10:29:16

敏捷開(kāi)發(fā)

2014-07-16 13:39:30

Windows Pho

2015-07-08 16:28:23

weak生命周期

2022-04-19 07:20:24

軟件開(kāi)發(fā)安全生命周期SSDLC應(yīng)用安全

2012-12-04 10:02:03

2009-06-11 11:28:35

JSF生命周期
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)