iOS app的生命週期

2022-07-27 20:36:15 字數 3324 閱讀 3705

對於ios應用程式,關鍵的是要知道你的應用程式是否正在前台或後台執行。由於系統資源在ios裝置上較為有限,乙個應用程式必須在後台與前台有不同的行為。作業系統也會限制你的應用程式在後台的執行,以提高電池壽命,並提高使用者與前台應用程式的體驗。當應用程式在前台和後台之間切換時,作業系統將會通知您的應用程式。你可以通過這些通知來修改你的應用程式的行為。

當你的應用程式在前台活動時,系統會傳送觸控事件給它進行處理。在uikit的基礎設施做了大部分的事件傳遞給你的自定義物件工作。所有您需要做的是覆蓋在相應的物件的方法來處理這​​些事件。對於控制項,uikit會通過處理你的觸控事件,或者其他一些有趣的事情發生時呼叫您的自定義**,比如當文字欄位中的值更改。

1:應用程式的狀態

not running未執行:程式沒啟動。

inactive未啟用:程式在前台執行,不過沒有接收到事件。在沒有事件處理情況下程式通常停留在這個狀態。

active啟用:程式在前台執行而且接收到了事件。這也是前台的乙個正常的模式。

backgroud後台:程式在後台而且能執行**,大多數程式進入這個狀態後會在在這個狀態上停留一會。時間到之後會進入掛起狀態(suspended)。有的程式經過特殊的請求後可以長期處於backgroud狀態。

suspended掛起:程式在後台不能執行**。系統會自動把程式變成這個狀態而且不會發出通知。當掛起時,程式還是停留在記憶體中的,當系統記憶體低時,系統就把掛起的程式清除掉,為前台程式提供更多的記憶體。

2:各個程式執行狀態時**的**

①告訴**程序啟動但還沒進入狀態儲存

②告訴**啟動基本完成程式準備開始執行

③當應用程式將要入非活動狀態執行,在此期間,應用程式不接收訊息或事件,比如來**

④當應用程式進入活動狀態執行

⑤當程式被推送到後台的時候呼叫。所以要設定後台繼續執行,則在這個函式裡面設定即可];}

⑥當程式從後台將要重新回到前台時候呼叫

⑧當程式載入後執行

程式啟動時:

2014-07-01 15:55:14.706 lifecycle[5845:60b] ①告訴**程序啟動但還沒進入狀態儲存

2014-07-01 15:55:14.708 lifecycle[5845:60b] ②告訴**啟動基本完成程式準備開始執行

2014-07-01 15:55:14.709 lifecycle[5845:60b] ④當應用程式進入活動狀態執行

按下home鍵返回主介面:

2014-07-01 15:56:11.756 lifecycle[5845:60b] ③當應用程式將要入非活動狀態執行

2014-07-01 15:56:11.814 lifecycle[5845:60b] ⑤當程式被推送到後台的時候呼叫

再次開啟程式:

2014-07-01 15:57:19.200 lifecycle[5845:60b] ⑥當程式從後台將要重新回到前台時候呼叫

2014-07-01 15:57:19.201 lifecycle[5845:60b] ④當應用程式進入活動狀態執行

3:載入應用程式進入前台

4:載入應用程式進入後台

5:基於警告式響應中斷

當出現這種中斷時,我們需要在

方法中進行如下操作:

①停止timer 和其他週期性的任務

②停止任何正在執行的請求

④如果是遊戲那就暫停它

⑤減少opengl es的幀率

⑥掛起任何分發的佇列和不重要的操作佇列(你可以繼續處理網路請求或其他時間敏感的後台任務)

當程式回到active狀態,我們需要在

方法中重新開始上述任務。不過遊戲要回到暫停狀態,不能自動開始。

6:進入後台執行

當應用程式進入後台時,我們應該做些什麼?

儲存使用者資料或狀態資訊,所有沒寫到磁碟的檔案或資訊,在進入後台時,最後都寫到磁碟去,因為程式可能在後台被殺死。

釋放盡可能釋放的記憶體。

方法有大概5秒的時間讓你完成這些任務。如果超過時間還有未完成的任務,你的程式就會被終止而且從記憶體中清除。

如果還需要長時間的執行任務,可以在該方法中呼叫

nslog(

@"begin background task with expiration handler");

}];應用程式在後台時的記憶體使用:請求後台執行時間和啟動執行緒來首席執行官時間執行的任務。

在後台時,每個應用程式都應該釋放最大的記憶體。系統努力的保持更多的應用程式在後台同時 執行。不過當記憶體不足時,會終止一些掛起的程式來**記憶體,那些記憶體最大的程式首先被終止。

事實上,應用程式應該的物件如果不再使用了,那就應該盡快的去掉強引用,這樣編譯器可以**這些記憶體。如果你想快取一些物件提公升程式的效能,你可以在進入後台時,把這些物件去掉強引用。

下面這樣的物件應該盡快的去掉強引用:

①物件③任何沒用而且可以輕易建立的物件

在後台時,為了減少程式占用的記憶體,系統會自動在**一些系統幫助你開闢的記憶體。比如:

①系統**core animation的後備儲存。

②去掉任何系統引用的快取

③去掉系統管理資料快取強引用

7:返回前台執行

在暫停狀態的應用程式必須準備處理任何排隊的通知時,它返回到前台或後台執行狀態。暫停的應用程式不執行任何**,因此不能處理與方向的變化,時間的變化,偏好的變化,以及許多其他會影響應用程式的外觀或狀態的通知。為了確保這些更改不會丟失,系統排隊許多相關的通知,並把它們傳遞給應用程式,只要它開始再次執行**(無論是在前景或背景)。為了防止由偏快轉為超載與它恢復時通知您的應用程式,該系統凝聚事件,並提供乙個單一的通知(每個相關型別),反映了淨變化,因為你的應用程式被暫停。

8:程式終止

程式只要符合以下情況之一,只要進入後台或掛起狀態就會終止:

①ios4.0以前的系統

③裝置不支援多工

注意:使用者可以手工關閉應用程式。

9:the main run loop  主執行迴圈

iOS App應用生命週期

ios應用的五種狀態 1 not running 非執行狀態 應用沒有執行或被系統終止。2 inactive 前台非活動狀態 應用正在進入前台狀態,但是還不能接受事件處理。3 active 前台活動狀態 應用進入前台狀態,能接受事件處理。4 background 後台狀態 應用進入後台後,依然能夠執...

React 生命週期 生命週期方法

生命週期 掛載 更新 解除安裝 元件被建立 執行初始化 並被掛載到dom中,完成元件的第一次渲染 constructor props getderivedstatefromprops props,state render componentdidmount 元件被建立時會首先呼叫元件的構造方法,接受...

actived生命週期 Vuejs 生命週期

每個 vue 例項在被建立時都要經過一系列的初始化過程。如需要設定資料監聽 編譯模板 將例項掛載到 dom 並在資料變化時更新 dom 等。同時在這個過程中也會執行一些叫做生命週期鉤子的函式,這給了使用者在不同階段新增自己的 的機會。乙個 vue 例項 我們建立乙個 vue 例項,並在每個階段驗證 ...