android基礎(chǔ)學(xué)習(xí)系統(tǒng)小節(jié)

四大組件.png

知識(shí)點(diǎn)小節(jié):

Activity的生命周期?

Activity的生命周期

onCreate(): 活動(dòng)第一次被創(chuàng)建的時(shí)候調(diào)用
onStart(): 活動(dòng)由不可見(jiàn)變?yōu)榭梢?jiàn)
onResume(): 活動(dòng)準(zhǔn)備好和用戶進(jìn)行交互,此時(shí)的活動(dòng)一定處于返回棧的棧頂,并且處于運(yùn)行狀態(tài)
onPause(): 系統(tǒng)準(zhǔn)備啟動(dòng)或恢復(fù)另一個(gè)活動(dòng)(保存一些關(guān)鍵數(shù)據(jù))
onStop(): 在活動(dòng)完全不可見(jiàn)時(shí)調(diào)用
onDestory(): 活動(dòng)被銷(xiāo)毀前
onReStart(): 由停止?fàn)顟B(tài)變?yōu)檫\(yùn)行狀態(tài)之前調(diào)用

onStart()和onResume() onPause()和onStop()的區(qū)別?

onStart()是activity界面被顯示出來(lái)的時(shí)候執(zhí)行的,用戶可見(jiàn),包括有一個(gè)activity在他上面,但沒(méi)有將它完全覆蓋,用戶可以看到部分activity但不能與它交互
onResume()是當(dāng)該activity與用戶能進(jìn)行交互時(shí)被執(zhí)行,用戶可以獲得activity的焦點(diǎn),能夠與用戶交互。

onPause()是Activity去焦點(diǎn),但仍然可見(jiàn);
onStop()是Activity在后臺(tái)不可見(jiàn)時(shí)觸發(fā)(完全被另一個(gè)Activity擋住,或者程序在后臺(tái)運(yùn)行)
Dialog不會(huì)調(diào)用onPause()和onStop(), 非全屏Activity會(huì)調(diào)用onPause()不會(huì)調(diào)用onStop(),全屏Activity 會(huì)調(diào)用onPause()和onStop()。

Activity A啟動(dòng)另一個(gè)Activity B會(huì)回調(diào)哪些方法?如果Activity B是完全透明呢?如果啟動(dòng)的是一個(gè)Dialog呢?

談?wù)刼nSaveInstanceState()方法?何時(shí)會(huì)調(diào)用?

當(dāng)內(nèi)存不足,處于非棧頂?shù)幕顒?dòng)被系統(tǒng)回收時(shí),為了不影響用戶體驗(yàn),Activity提供了onSaveInstanceState()回調(diào)方法,這個(gè)方法可以保證在活動(dòng)被回收之前一定會(huì)被調(diào)用,我們可以通過(guò)這個(gè)方法來(lái)解決活動(dòng)被回收時(shí)臨時(shí)數(shù)據(jù)得不到保存的問(wèn)題。
1、當(dāng)用戶按下HOME鍵時(shí)
2、長(zhǎng)按HOME鍵,選擇運(yùn)行其他的程序時(shí)。
3、按下電源按鍵(關(guān)閉屏幕顯示)時(shí)。
4、從activity A中啟動(dòng)一個(gè)新的activity時(shí)。
5、屏幕方向切換時(shí),例如從豎屏切換到橫屏?xí)r。(在屏幕切換之前,系統(tǒng)會(huì)銷(xiāo)毀activity A,在屏幕切換之后系統(tǒng)又會(huì)自動(dòng)地創(chuàng)建activity A,所以onSaveInstanceState一定會(huì)被執(zhí)行)
總而言之,onSaveInstanceState的調(diào)用遵循一個(gè)重要原則,即當(dāng)系統(tǒng)“未經(jīng)你許可”時(shí)銷(xiāo)毀了你的activity,則onSaveInstanceState會(huì)被系統(tǒng)調(diào)用,這是系統(tǒng)的責(zé)任,因?yàn)樗仨氁峁┮粋€(gè)機(jī)會(huì)讓你保存你的數(shù)據(jù)

onSaveInstanceState()與onPause()的區(qū)別?

1、onPause()中要保存的是永久化數(shù)據(jù),onSaveInstanceState()保存用于恢復(fù)的內(nèi)存數(shù)據(jù)
2、onSaveInstanceState()并不是永遠(yuǎn)都會(huì)調(diào)用。比如,當(dāng)用戶在一個(gè)activity上按返回時(shí),就不會(huì)調(diào)用,因?yàn)橛脩舸藭r(shí)明確知道這個(gè)activity是要被銷(xiāo)毀的,并不期望下次它的樣子跟現(xiàn)在一樣,所以就不用調(diào)用onSaveInstanceState()

如何避免配置改變時(shí)Activity重建?

那么當(dāng)屏幕發(fā)生改變時(shí),srceenSize發(fā)生改變時(shí), 在AndroidManfest.xml中對(duì)應(yīng)的Activity標(biāo)簽中添加android:configChanges=”orientation|screenSize”

優(yōu)先級(jí)低的Activity在內(nèi)存不足被回收后怎樣做可以恢復(fù)到銷(xiāo)毀前狀態(tài)?

說(shuō)下Activity的四種啟動(dòng)模式?

1.standard:該啟動(dòng)模式為Android默認(rèn)啟動(dòng)模式,每當(dāng)啟動(dòng)一個(gè)activity就會(huì)在任務(wù)棧中創(chuàng)建一個(gè) activity,這種模式是默認(rèn)的,雖然可以有效的保存之前啟動(dòng)的activity,但是非常的浪費(fèi)空間。
2.single Top:該啟動(dòng)模式是在查看任務(wù)棧頂和你將要啟動(dòng)的activity是否是一個(gè)activity,是一個(gè)就直接復(fù)用,否則就新創(chuàng)一個(gè)實(shí)例,這個(gè)經(jīng)常用于類(lèi)似聊天界面,當(dāng)有人給你發(fā)消息時(shí)更新activity。
3.single Task:該啟動(dòng)模式是在任務(wù)棧中看是否有和你一樣的activity,有則直接把該activity之上的activity全部彈出使之置于棧頂。常用于一個(gè)程序的入口處。
4.single Instance:該啟動(dòng)模式是再創(chuàng)建一個(gè)任務(wù)棧把a(bǔ)ctivity放進(jìn)去。此模式用于不同應(yīng)用調(diào)用一個(gè)activity時(shí)應(yīng)用。用于程序和界面分開(kāi)的時(shí)候。

談?wù)剆ingleTop和singleTask的區(qū)別以及應(yīng)用場(chǎng)景

onNewIntent()調(diào)用時(shí)機(jī)?

image.png

了解哪些Activity啟動(dòng)模式的標(biāo)記位?

常用的:
1、FLAG_ACTIVITY_NEW_TASK
這個(gè)標(biāo)記位的作用是為Activity指定“singleTask”啟動(dòng)模式,效果和在AndroidManifest.xml中指定“singleTask”模式相同。
2、FLAG_ACTIVITY_SINGLE_TOP
這個(gè)標(biāo)記位的作用是為Activity指定“singleTop”啟動(dòng)模式,效果和在AndroidManifest.xml中指定“singleTop”模式相同。
3、FLAG_ACTIVITY_CLEAR_TOP
這個(gè)標(biāo)記位表示的是具有此標(biāo)記位的Activity,當(dāng)它啟動(dòng)時(shí),在同一個(gè)任務(wù)棧中所有位于它上面的Activity都要出棧。如果被啟動(dòng)的Activity采用standard模式啟動(dòng),那么它連同它之上的Activity都要出棧,系統(tǒng)會(huì)創(chuàng)建新的Activity實(shí)例并壓入棧頂。這個(gè)標(biāo)記位與FLAG_ACTIVITY_NEW_TASK配合使用時(shí),如果被啟動(dòng)的Activity已經(jīng)存在,那么系統(tǒng)就會(huì)調(diào)用它的onNewIntent方法。
4、FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
具有這個(gè)標(biāo)記位的Activity不會(huì)出現(xiàn)在歷史Activity的列表中,當(dāng)某些情況下我們不希望用戶通過(guò)歷史列表回到我們的Activity時(shí)可以使用這個(gè)標(biāo)記位。它等同于在AndroidManifest.xml中指定Activity的屬性android:excludeFromRecents="true"。

如何啟動(dòng)其他應(yīng)用的Activity?

Fragment的生命周期?

image.png

onAttach(): 當(dāng)碎片和活動(dòng)建立關(guān)聯(lián)時(shí)調(diào)用
onCreateView(): 加載布局時(shí)
onActivityCreated(): 確保與碎片相關(guān)聯(lián)的活動(dòng)已經(jīng)創(chuàng)建完畢的時(shí)候
onDestroyVIew(): 當(dāng)與碎片關(guān)聯(lián)的視圖被移除時(shí)
onDetach(): 當(dāng)碎片與活動(dòng)解除關(guān)聯(lián)時(shí)

Activity和Fragment的關(guān)系?

Fragment是到Android3.0+ 以后,baiAndroid新增了Fragments,在沒(méi)有 Fragment 之前,一個(gè)屏幕只能放一個(gè) Activity。這是一個(gè)起源時(shí)間大家要知道是什么時(shí)候開(kāi)始引入的。
Fragment是一種可以嵌入在活動(dòng)當(dāng)中的UI片段,會(huì)受到activity的活動(dòng)周期的影響。
Activity 代表了一個(gè)屏幕的主體,而Fragment可以作為Activity的一個(gè)組成元素。
一個(gè)Activity可以有若干個(gè)Fragment構(gòu)成。你可以把Fragment想象成Activity中的一個(gè)控件,只不過(guò)相對(duì)于一般控件,F(xiàn)ragment與Activity聯(lián)系更為緊密,隨著Activity的生命周期變化,F(xiàn)ragment也隨之相應(yīng)不同的生命周期函數(shù)。

何時(shí)會(huì)考慮使用Fragment?

廣播有幾種形式?什么特點(diǎn)?

廣播的兩種注冊(cè)形式?區(qū)別在哪?

1、動(dòng)態(tài)注冊(cè),在代碼里執(zhí)行rigisterBroadcastReciver的方法。應(yīng)用啟動(dòng)后才監(jiān)聽(tīng),關(guān)閉后就不監(jiān)聽(tīng)。
2、靜態(tài)注冊(cè),就是在manifest文件里配置,這種方式注冊(cè)的廣播屬于系統(tǒng)級(jí)廣播。你的應(yīng)用沒(méi)打開(kāi)也能收到廣播。

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

友情鏈接更多精彩內(nèi)容