Activity的概念
1.Activity - 與用戶交互的接口
2.Android系統(tǒng)是通過Activity棧的形式來管理Activity的
activity任務(wù)棧.png
Activity的4種形態(tài):
1.Active:Activity處于棧頂
2.Paused:可見但不可交互
3.Stopped:不可見
4.Killed:系統(tǒng)回收掉
Activity的生命周期
activity的生命周期.png
1. 以上為正常情況下activity的生命周期流程圖掘鄙。
2. 下面總結(jié)異常情況下生命周期流程:
3. 相比正常情況生命周期,異常終止情況下生命周期多了兩個方法:` onSaveInstanceState(Bundle outState)` 、` onRestoreInstanceState(Bundle savedInstanceState)`祠丝。這兩個方法在activity異常情況下,系統(tǒng)會自動調(diào)用前者來保存數(shù)據(jù)信息。當(dāng)系統(tǒng)重新啟動的時候,會調(diào)用后者將保存的數(shù)據(jù)信息通過bundle參數(shù)傳遞過來盈电。
4. ` onCreate(@Nullable Bundle savedInstanceState)` ` onRestoreInstanceState(Bundle savedInstanceState)`,兩個方法參數(shù)都有bundle,二者選其一的話杯活,推薦后者匆帚,后者中的bundle一定不為空,而前者里面的bundle有可能為空轩猩。
總結(jié):
1.activity正常啟動: onCreate - onStart - onResume
2.點擊back回退: onPause - onStop - onDestroy
3.打開新的activity: onPause - onStop
4.activity異常: onSaveInstanceState來保存數(shù)據(jù)
5.activity重新創(chuàng)建: 調(diào)用onRestoreInstanceState來恢復(fù)數(shù)據(jù)
Activity組件之間的通信
activity與activity之間的通信:
1. Intent/Bundle
2. 類靜態(tài)變量
3. 全局變量
activity與fragment之間的通信:
一:activity將數(shù)據(jù)傳遞給fragment:
1.bundle
2.直接在activity中定義方法
二:fragment將數(shù)據(jù)傳遞給activity:
1.接口回調(diào):
1.1 在fragment中定義一個內(nèi)部回調(diào)接口
1.2 fragment的方法onAttach()中判斷是否實現(xiàn)接口
1.3 調(diào)用onDetach方法卷扮,這個時候要把傳遞進來的activity對象釋放掉
activity與service之間的通信:
1. 綁定服務(wù),利用ServiceConnection接口傳遞數(shù)據(jù)
2. 簡單通信均践,利用Intent進行傳值
3. 定義一個callback接口來監(jiān)聽服務(wù)中的進程的變化
Activity的四種啟動模式
1.standard:
1.1 在不指定啟動模式的前提下晤锹,系統(tǒng)默認使用該模式啟動activity。
1.2 每次啟動activity都會重新創(chuàng)建一個新的實例彤委。
1.3 重新創(chuàng)建的activity會依次調(diào)用onCreate()鞭铆,onStart(),onResume()方法。
2.singleTop:
2.1 當(dāng)前棧中已經(jīng)有該activity的實例并且該實例位于棧頂時车遂,復(fù)用該實例封断。
2.2 當(dāng)前棧中已經(jīng)有該activity的實例但是該實例不在棧頂時,創(chuàng)建新實例舶担,不復(fù)用坡疼。
2.3 當(dāng)前棧中不存在該activity的實例時,創(chuàng)建新實例衣陶,不復(fù)用柄瑰。
2.4 應(yīng)用場景:IM對話框、新聞客戶端推送剪况。
3.singleTask:
3.1 首先會根據(jù)taskAffinity(任務(wù)相關(guān)性)去尋找當(dāng)前是否存在一個對應(yīng)名字的任務(wù)棧教沾。
3.2 如果不存在,則會創(chuàng)建一個新的task译断,并創(chuàng)建新的activity實例授翻,加入任務(wù)棧中。
3.3 如果存在孙咪,則得到該任務(wù)棧堪唐,查找任務(wù)棧中是否存在該activity實例,存在该贾,彈出該activity以上的所有實例羔杨。不存在,創(chuàng)建新的activity實例加入任務(wù)棧杨蛋。
3.4 應(yīng)用場景:應(yīng)用的主界面。
4.singleInstance:
4.1 以singleInstance模式啟動的activity具有全局唯一性理澎。
4.2 如果在啟動這樣的activity時逞力,已經(jīng)存在了一個實例,會把所在的任務(wù)調(diào)度到前臺糠爬,復(fù)用該實例寇荧。
4.3 以singleInstace模式啟動的activity實例具有獨占性,獨自占用一個任務(wù)棧执隧。
4.4 應(yīng)用場景:呼叫來電揩抡。