初識Android一之生命週期


第一次接觸安卓開發,感覺很有必要把生命週期弄明白,不然感覺雲裏霧裏很難受,總之很難受!!!於是把老師的ppt結合各種網上搜來的瞄了一遍,
記錄一下自己小小的理解和大大的感受。

1.程序生命週期

程序生命週期是什麼?程序生命週期麼就是在android系統中進程從創建到終止的所有階段。

Android會根據組件的重要程度將系統中的每個進程分別分爲5大類:

  • 前臺進程:可見並可以與用戶交互(優先級最高)。
  • 可見進程:可見但不可交互。
  • 服務進程:有啓動服務的進程,無用戶界面,長期後臺運行如後臺音樂播放。
  • 後臺進程:不包含任何啓動的服務,無用戶可見的進程,如用戶按home鍵,程序就成爲後臺進程。ps:系統會隨時終止後臺進程,爲前三種進程提供足夠的內存。
  • 空進程:不包含任何活躍組件的進程,存在的目的是提供一種緩存機制,爲了下次打開這個軟件的時候可以更加方便快速,一旦手機要更多內存,最先被處理。如用戶按退出鍵,程序變爲空進程(優先級最低)。
    ps:所以可見,要退出軟件時,最好用退出鍵,讓其變爲空進程,也沒必要主動去清理,系統自己會清理,主動去清理反而違背了系統設計的意志。

2.四大組件

在說Activity的生命週期前,得了解什麼是Activity。記得上課時,老師講到Activity,旁邊一哥們問我啥是Activity,我很虛的回答,活動啊,
活動是神馬,我也不知道,但當時覺得很對。其實Activity是一個組件。組件是可以調用的基本功能模塊,Android應用程序就是由組件組成的。
Android系統有四個重要的組件,分別是Activity、Service、BroadcaseReceiver和ContentProvider

  • Activity:程序顯示的界面,也是交互的界面,一個程序當然可以有多個界面。表現形式:全屏窗體,非全屏懸浮窗體,對話框。

  • Service:這個組件用於沒有用戶界面,長時間在後臺運行的應用。

  • BoardcaseReceiver:用來接受並響應廣播消息的組件。可以通過啓動Activity或者Notification通知用戶接收到重要信息。Notification能夠通過多種方法提示用戶,包括閃動背景燈、震動設備、發出聲音或在狀態欄上放置一個持久的圖標。

  • ContentProvider:Android系統提供的一種標準的共享數據的機制,應用程序可以通過ContentProvider組件訪問其他應用程序的私有數據。

3.Activity生命週期

這纔是本文重頭戲,Activity生命週期!!!當然,所有組件都有其生命週期,我主要討論Activity生命週期,爲什麼?哪有那麼多爲什麼?!
我把Activity生命週期分爲4狀態9函數3週期。
Activty從啓動到銷燬表現爲四個狀態:活動、暫停、停止、非活動,遵循先進先出的棧:

  • 活動狀態:Activity在用戶界面中最上層,用戶可見並可交互。ps:什麼進程?
  • 暫停狀態:Activity被部分遮擋,不在最上層,用戶可見但不可以交互。ps:什麼進程?
  • 停止狀態:Activity完全不能被用戶看見,被其他Activity遮擋。ps:什麼進程。
  • 非活動狀態:不在以上三種狀態的Activity。很模糊,不管它!

Activity狀態圖

activity狀態棧圖

Activity生命週期有9個事件回調函數:

  • onCreate(): Activity啓動後第一個被創建的函數,常被用來初始化。
  • onStart(): Activity被顯示在屏幕上時被調用,用來初始化或啓動與更新界面相關的資源。
  • onRestoreInstanceState(): 恢復onSaveInstanceState()保存的Activity狀態信息,在onStart()和onResume ()之間被調用。
  • onResume(): 當Activity能和用戶交互時被調用,此時Activity在棧的頂層。
  • onPause(): 當Activity進入暫停狀態時被調用,用來保存持久的數據和釋放佔用的資源。
  • onStop(): 當Activity進入停止狀態時被調用,一般用來暫停或停止一切與更新用戶界面相關的線程、計時器和服務。
  • onRestart(): 當Activity從停止狀態進入活動狀態,調用此函數,
  • onDestory(): 當Activity進入非活動狀態,及被銷燬時被調用。
  • onSaveInstanceState(): 當Android系統因資源不足終止Activity前調用該函數,用以保存Activity的狀態信息,供onRestoreInstanceState()或onCreate()恢復之用。
    Activity事件回調函數調用順序

如果仔細研究了上圖的,想必一定發現了我說的那三個生命週期:

  • 全生命週期: 從onCreate()初始化到onDestroy()釋放,激進點的會不調用onDestroy()直接kill掉進程。
  • 可視生命週期: 從onStart()顯示界面到onStop()界面不可見。
  • 活動生命週期: 這個週期開始於onResume(),結束於onPause(),Activity在棧的最上層,能與用戶交互。因爲在Activity的狀態變換過程中onResume()和onPause()經常被調用,因此這兩個函數中應使用更爲簡單、高效的代碼。

小結:ok,對生命週期的認識就到此結束了。本來想舉個例子,通過LogCat的輸出來查看生命週期的具體運行,但,夜深了,該睡了,睡了,了。Zzzzzzz


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章