本文分為以下幾個(gè)部分:
1会涎、Activity是什么?
2熊榛、如何創(chuàng)建Activity讼昆?
3、Activity生命周期
4其兴、Activity啟動(dòng)模式詳解
Activity是什么?
Activity是一個(gè)應(yīng)用程序組件顶瞒,用戶可以與其提供的屏幕進(jìn)行交互,例如撥打電話元旬,拍照榴徐,發(fā)送電子郵件等守问。Activity 提供窗口供應(yīng)用在其中繪制界面。此窗口通常會(huì)填滿屏幕箕速,但也可能比屏幕小酪碘,并浮動(dòng)在其他窗口上面朋譬。
大多數(shù)應(yīng)用包含多個(gè)屏幕盐茎,意味著會(huì)有多個(gè)Activity。通常徙赢,應(yīng)用中的一個(gè) Activity 會(huì)被指定為主 Activity字柠,這是用戶啟動(dòng)應(yīng)用時(shí)出現(xiàn)的第一個(gè)屏幕。然后狡赐,每個(gè) Activity 可以啟動(dòng)另一個(gè) Activity窑业,以執(zhí)行不同的操作。例如枕屉,一個(gè)簡(jiǎn)單的電子郵件應(yīng)用中的主 Activity 可能會(huì)提供顯示電子郵件收件箱的屏幕常柄。主 Activity 可能會(huì)從該屏幕啟動(dòng)其他 Activity,以提供執(zhí)行寫郵件和打開(kāi)郵件這類任務(wù)的屏幕搀擂。
如何創(chuàng)建Activity?
要?jiǎng)?chuàng)建Activity西潘,必須創(chuàng)建Activity的子類。在子類中哨颂,您需要實(shí)現(xiàn)當(dāng)Activity在其生命周期的各個(gè)狀態(tài)之間轉(zhuǎn)換時(shí)系統(tǒng)調(diào)用的回調(diào)方法喷市,如下:
public class ExampleActivity extends AppCompatActivity {
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
//您必須實(shí)現(xiàn)此方法。系統(tǒng)在創(chuàng)建Activity時(shí)調(diào)用此方法威恼。最重要的是品姓,您必須在此處調(diào)用以定義Activity用戶界面的布局。
setContentView();
}
}
最重要的要在manifest中聲明此Activity及其特定屬性:
<manifest ... >
<application ... >
<activity android:name=".ExampleActivity" />
...
</application ... >
...
</manifest >
Activity的生命周期
一個(gè) Activity 在其生命周期中會(huì)經(jīng)歷多種狀態(tài)箫措。您可以使用一系列回調(diào)來(lái)處理狀態(tài)之間的轉(zhuǎn)換腹备。
Activity完整的生命周期方法:
public class ExampleActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// The activity is being created.
}
@Override
protected void onStart() {
super.onStart();
// The activity is about to become visible.
}
@Override
protected void onResume() {
super.onResume();
// The activity has become visible (it is now "resumed").
}
@Override
protected void onPause() {
super.onPause();
// Another activity is taking focus (this activity is about to be "paused").
}
@Override
protected void onStop() {
super.onStop();
// The activity is no longer visible (it is now "stopped")
}
@Override
protected void onDestroy() {
super.onDestroy();
// The activity is about to be destroyed.
}
}
下面介紹這些方法:
onCreate()
必須實(shí)現(xiàn)此回調(diào),它會(huì)在系統(tǒng)創(chuàng)建您的 Activity 時(shí)觸發(fā)斤蔓。最重要的是植酥,您必須在此處調(diào)用 setContentView() 來(lái)定義 Activity 界面的布局。onCreate完成后附迷,下一個(gè)回調(diào)將是onStart()
onStart()
onCreate()退出后惧互,Activity 將進(jìn)入“已啟動(dòng)”狀態(tài),并對(duì)用戶可見(jiàn)喇伯。此回調(diào)包含 Activity 進(jìn)入前臺(tái)與用戶進(jìn)行互動(dòng)之前的最后準(zhǔn)備工作喊儡。
onResume()
系統(tǒng)會(huì)在 Activity 開(kāi)始與用戶互動(dòng)之前調(diào)用此回調(diào)。此時(shí)稻据,該 Activity 位于 Activity 堆棧的頂部艾猜,并會(huì)捕獲所有用戶輸入买喧。應(yīng)用的大部分核心功能都是在onResume()方法中實(shí)現(xiàn)的。
onResume()回調(diào)后面總是跟著onPause()回調(diào)匆赃。
onPause()
當(dāng) Activity 失去焦點(diǎn)并進(jìn)入“已暫陀倜”狀態(tài)時(shí),系統(tǒng)就會(huì)調(diào)用 onPause()算柳。例如低淡,當(dāng)用戶點(diǎn)按“返回”或“最近使用的應(yīng)用”按鈕時(shí),就會(huì)出現(xiàn)此狀態(tài)瞬项。當(dāng)系統(tǒng)為您的 Activity 調(diào)用onPause() 時(shí)蔗蹋,從技術(shù)上來(lái)說(shuō),這意味著您的 Activity 仍然部分可見(jiàn)囱淋,但大多數(shù)情況下猪杭,這表明用戶正在離開(kāi)該 Activity,該 Activity 很快將進(jìn)入“已停止”或“已恢復(fù)”狀態(tài)妥衣。
如果用戶希望界面繼續(xù)更新皂吮,則處于“已暫停”狀態(tài)的 Activity 也可以繼續(xù)更新界面税手。例如蜂筹,顯示導(dǎo)航地圖屏幕或播放媒體播放器的 Activity 就屬于此類 Activity。即使此類 Activity 失去了焦點(diǎn)冈止,用戶仍希望其界面繼續(xù)更新狂票。
您不應(yīng)使用 onPause()來(lái)保存應(yīng)用或用戶數(shù)據(jù)、進(jìn)行網(wǎng)絡(luò)呼叫或執(zhí)行數(shù)據(jù)庫(kù)事務(wù)熙暴。
onPause() 執(zhí)行完畢后闺属,下一個(gè)回調(diào)為onStop()或 onResume()具體取決于 Activity 進(jìn)入“已暫停”狀態(tài)后發(fā)生的情況周霉。
onStop()
當(dāng) Activity 對(duì)用戶不再可見(jiàn)時(shí)掂器,系統(tǒng)會(huì)調(diào)用onStop()。出現(xiàn)這種情況的原因可能是 Activity 被銷毀俱箱,新的 Activity 啟動(dòng)国瓮,或者現(xiàn)有的 Activity 正在進(jìn)入“已恢復(fù)”狀態(tài)并覆蓋了已停止的 Activity。在所有這些情況下狞谱,停止的 Activity 都將完全不再可見(jiàn)乃摹。
系統(tǒng)調(diào)用的下一個(gè)回調(diào)將是onRestart()(如果 Activity 重新與用戶互動(dòng))或者 onDestroy()(如果 Activity 徹底終止)。
onRestart()
當(dāng)處于“已停止”狀態(tài)的 Activity 即將重啟時(shí)跟衅,系統(tǒng)就會(huì)調(diào)用此回調(diào)孵睬。onRestart() 會(huì)從 Activity 停止時(shí)的狀態(tài)恢復(fù) Activity。此回調(diào)后面總是跟著 onStart()伶跷。
onDestroy()
系統(tǒng)會(huì)在銷毀 Activity 之前調(diào)用此回調(diào)掰读。
此回調(diào)是 Activity 接收的最后一個(gè)回調(diào)秘狞。通常,實(shí)現(xiàn) onDestroy()是為了確保在銷毀 Activity 或包含該 Activity 的進(jìn)程時(shí)釋放該 Activity 的所有資源蹈集。
最后給個(gè)經(jīng)典圖片:
Activity啟動(dòng)模式詳解
詳細(xì)參考:深入理解Activity啟動(dòng)模式