《Android開發(fā)藝術探索》第一章筆記(一) Activity超詳細的生命周期理解

雖然做安卓開發(fā)也不短了,可是對好多基礎的東西卻沒有那個自信去解釋的很清楚,寫這個系列的文章的初衷是希望自己能重拾一些東西,也想看看當初學的東西,現在再看有什么不一樣的理解,“ 溫故而知新。 ”這句古話,真的很有意義。好了,話不多說,開始復習。

1.起源

Activity是與用戶交互的第一接口,它提供了一個用戶完成指令的窗口,當開發(fā)者創(chuàng)建Activity之后呢,通過setContentView(View)方法給該Activity指定一個顯示的界面,并以此來為基礎提供給用戶交互的接口,系統(tǒng)采用Activity棧的方式來管理Activity。

2.形態(tài)

Activity在各個形態(tài)間切換,來控制自己的生命周期。

  • Activity / Running
    這時,Activity處于Activity棧的最頂層,可見,并與用戶進行交互。
  • Paused
    當Activity失去焦點,被一個新的非全屏的Activity或者透明的Activity放置在棧頂時,Activity就會轉換為Paused形態(tài)。但只是失去了與用戶交互的能力,所有狀態(tài)信息,成員變量都還保持著,只有在系統(tǒng)內存極低的情況下,才會被系統(tǒng)回收掉。
  • Stopped
    如果一個Activity被另一個Activity完全覆蓋,那么Activity就會進入Stopped形態(tài),不再可見,卻保持了所有狀態(tài)信息和成員變量。
  • Killed
    Activity被殺掉以后或者被啟動以前,處于Killed狀態(tài)。這是Activity已從Activity堆棧中移除,需要重新啟動才可以顯示和使用。

3.生命周期

正常情況下,Activity的常用生命周期只有下面7個,下圖更詳細的描述了Activity各種生命周期的切換過程。


Activity 生命周期 (經典).png
onCreate( )
  • 表示正在被創(chuàng)建,這是Activity的第一個方法,在這個方法里我們通常會做一些初始化工作,如調用
    setContentView去加載界面布局資源,初始化Activity所需數據等。
onStart ( )
  • 表示Activity正在被啟動,這時是可見的,但是沒有出現在前臺,無法和用戶交互,這個時候可以理解為Activity已經顯示出來了,但是我們看不到。
onRestart( )
  • 表示Activity正在重新啟動,當處于非棧頂狀態(tài)的活動需要再次返回棧頂,展現給用戶的時候,觸發(fā)該方法。由不可見變成可見狀態(tài)時,onRestart就會被調用,比如,用戶按home鍵切換到桌面或者打開了一個新的Activity,這時當前的Activity會暫停,也就是
    onPauseonStop被執(zhí)行了,接著用戶又回到這個這個Activity,就會出現這種情況。
onResume( )
  • 表示Activity已經可見,并開始在前臺活動,和onStart相比,雖同為可見,但onStart時Activity還在后臺。
onPause( )
  • 表示正在停止,還是可見,無法再與用戶交互。正常情況下,接著就是onStop()被調用。在特殊情況下,如果這個時候快速的回到當前這個Activity,那么onResume( ) 會被調用,這個時候可以做一些存儲數據,停止動畫等工作,但是不能太耗時,這將影響新的Activity的顯示,onPause( )必須先執(zhí)行完,新的Activity的onResume( )才會執(zhí)行。
onStop( )
  • 表示Activity即將停止,已經不可見,可以稍微做一些回收工作,同樣不能太耗時。
onDestroy( )
  • 表示Activity即將被銷毀,這是Activity生命周期中的最后一個回調,這時,通常我們會做一些回收工作和最終的資源釋放。

針對上圖,還分為幾種情況:
1.一個特定的activity,第一次啟動,回調如下:

onCreate ->onStart ->onResume

2.當用戶打開一個新的activity或者切換到桌面時,回調如下:

onPause ->onStop

3.當用戶再回到原activity,回調如下:

onRestart ->onStart ->onResume

4.當用戶按back時,回調如下:

onPause ->onStop ->onDestroy

5.ActivityA和ActivityB,我們要點擊ActivityA的啟動ActivityB按鈕,來啟動ActivityB,然后點擊返回鍵,期間經歷了哪些生命周期?

1.啟動ActivityA, onCreate() ->onStart() ->onResume() ->onPause()

2.點擊ActivityA的跳轉按鈕,
activityB: onCreate() ->onStart() ->onResume()
activityA: onstop()

3.點擊ActivityB的返回按鈕
activityB: onPause()
activityA :onStart() ->onResume()
activityB:onstop() -> onDestroy()

由此可以看出在新的activity啟動之前,棧頂的activity需要先onPause后,新的activity才可以啟動

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容