Activity-基礎(chǔ)梳理

onPause()

系統(tǒng)將會(huì)調(diào)用這個(gè)方法作為用戶(hù)離開(kāi)activity的首先提示(雖然這并不意味著activity正在被銷(xiāo)毀)。

這通常是你應(yīng)該在用戶(hù)會(huì)話之前提交并保存任何更改的時(shí)機(jī)。 (因?yàn)橛脩?hù)可能不會(huì)再回到這個(gè)activity)

.addView()

你也可以在activity代碼里自己新建View,并通過(guò)插入子View到ViewGroup。 然后把這些視圖的根視圖傳入到setContentView()。


onActivityResult(int requestCode, int resultCode, Intent data)

?第一步要判斷請(qǐng)求是否被成功響應(yīng),通過(guò)判斷resultCode 是不是RESULT_OK

管理activity的生命周期activity可能處于三種基本的狀態(tài)

Resumed

?activity在屏幕的前臺(tái)并且擁有用戶(hù)的焦點(diǎn)。(這個(gè)狀態(tài)有時(shí)也被叫做“running”。)

?Paused?

另一個(gè)activity在前臺(tái)并擁有焦點(diǎn),但是本activity還是可見(jiàn)的。 也就是說(shuō),另外一個(gè)activity覆蓋在本activity的上面,并且那個(gè)activity是部分透明的或沒(méi)有覆蓋整個(gè)屏幕。 一個(gè)paused的activity是完全存活的(Activity 對(duì)象仍然保留在內(nèi)存里,它保持著所有的狀態(tài)和成員信息,并且保持與window manager的聯(lián)接),但在系統(tǒng)內(nèi)存嚴(yán)重不足的情況下它能被殺死。

?Stopped?

本activity被其它的activity完全遮擋住了(本activity目前在后臺(tái))。 一個(gè)stopped的activity也仍然是存活的(Activity 對(duì)象仍然保留在內(nèi)存中,它保持著所有的狀態(tài)和成員信息,但是不再與window manager聯(lián)接了)。 但是,對(duì)于用戶(hù)而言它已經(jīng)不再可見(jiàn)了,并且當(dāng)其它地方需要內(nèi)存時(shí)它將會(huì)被殺死。 如果activity被paused或stopped了,則系統(tǒng)可以從內(nèi)存中刪除它,通過(guò)請(qǐng)求finish(調(diào)用它的 finish() 方法)或者直接殺死它的進(jìn)程。 當(dāng)這個(gè)activity被再次啟動(dòng)時(shí)(在被finish或者kill后),它必須被完全重建。


注意: activity被銷(xiāo)毀之前,并不能確保每次都會(huì)調(diào)用 onSaveInstanceState() ,因?yàn)榇嬖谀切┎槐乇4鏍顟B(tài)的情況(比如用戶(hù)使用BACK鍵離開(kāi)了你的activity,因?yàn)橛脩?hù)明顯是關(guān)了這個(gè)activity)。 如果系統(tǒng)要調(diào)用 onSaveInstanceState() 方法,那么它通常會(huì)在 onStop() 方法之前并且可能是在 onPause() 之前調(diào)用。

不過(guò),即使你沒(méi)有實(shí)現(xiàn) onSaveInstanceState() 方法,有些activity狀態(tài)還是會(huì)通過(guò) Activity 類(lèi)缺省實(shí)現(xiàn)的onSaveInstanceState() 方法保存下來(lái)。特別的是,缺省為layout中的每個(gè) View 實(shí)現(xiàn)了調(diào)用相應(yīng)的onSaveInstanceState() 方法,這允許每一個(gè)view提供自己需被保存的信息。 幾乎Android框架下所有的widget都會(huì)在適當(dāng)?shù)臅r(shí)候?qū)崿F(xiàn)該方法,這樣,任何UI上可見(jiàn)的變化都會(huì)自動(dòng)保存下來(lái),并在activity重建后自動(dòng)恢復(fù)。 例如,EditText widget會(huì)保存所有用戶(hù)已經(jīng)輸入的文本, CheckBoxwidget 也會(huì)保存是否被選中。你所要做的工作僅僅是為每一個(gè)你想要保存其狀態(tài)的widget提供一個(gè)唯一的ID(就是 android:id 屬性)。如果這個(gè)widget沒(méi)有ID的話,系統(tǒng)是無(wú)法保存它們的狀態(tài)的。

通過(guò)把a(bǔ)ndroid:saveEnabled 設(shè)置為"false",或者調(diào)用 setSaveEnabled() 方法,你也可以顯式地阻止layout中的某個(gè)view保存狀態(tài)。 通常不應(yīng)該禁用保存,不過(guò)假如你需要恢復(fù)activity UI的各個(gè)不同的狀態(tài),也許可以這么做。

盡管缺省實(shí)現(xiàn)的 onSaveInstanceState() 方法會(huì)保存activity UI的有用信息,你仍然需要覆蓋它來(lái)存入更多的信息。 例如,你可能需要保存在activity生命周期中改變的成員變量值(可能是關(guān)于UI恢復(fù)的值,但是默認(rèn)情況下,存放這些UI狀態(tài)的成員變量值是不會(huì)被恢復(fù)的)。

因?yàn)槟J(rèn)實(shí)現(xiàn)的 onSaveInstanceState() 方法已經(jīng)幫你保存了一些UI的狀態(tài),所以如果你重寫(xiě)此方法是為了保存更多的狀態(tài)信息,那么在執(zhí)行自己的代碼之前應(yīng)該確保先調(diào)用一次父類(lèi)的 onSaveInstanceState() 方法。同理,如果重寫(xiě) onRestoreInstanceState() 的話,也應(yīng)該調(diào)用一次父類(lèi)的該方法,這樣缺省的代碼就能正?;謴?fù)view的狀態(tài)了。

注意:因?yàn)?onSaveInstanceState() 并不保證每次都會(huì)被調(diào)用,所以你應(yīng)該只用它來(lái)記錄activity的一些臨時(shí)狀態(tài)信息(UI的狀態(tài))——千萬(wàn)不要用它來(lái)保存那些需要長(zhǎng)久保存的數(shù)據(jù)。 替代方案是,你應(yīng)該在用戶(hù)離開(kāi)activity的時(shí)候利用 onPause() 來(lái)保存永久性數(shù)據(jù)(比如那些需要存入數(shù)據(jù)庫(kù)里的數(shù)據(jù))。

一個(gè)檢測(cè)應(yīng)用程序狀態(tài)恢復(fù)能力的好方法就是旋轉(zhuǎn)設(shè)備,使得屏幕方向發(fā)生改變。 當(dāng)屏幕的方向改變時(shí),因?yàn)橐獡Q用符合實(shí)際屏幕參數(shù)的資源,系統(tǒng)會(huì)銷(xiāo)毀并重建這個(gè)activity。 正因如此,你的activity能夠在被重建時(shí)完整地恢復(fù)狀態(tài)是非常重要的,因?yàn)橛脩?hù)會(huì)在使用應(yīng)用程序時(shí)會(huì)頻繁地旋轉(zhuǎn)屏幕。

配置改動(dòng)后的處理

設(shè)備的某些配置可能會(huì)在運(yùn)行時(shí)發(fā)生變化(比如屏幕方向、鍵盤(pán)可用性以及語(yǔ)言)。 當(dāng)發(fā)生這些變化時(shí),Android會(huì)重建這個(gè)運(yùn)行中的activity(系統(tǒng)會(huì)調(diào)用 onDestroy() ,然后再馬上調(diào)用 onCreate() )。這種設(shè)計(jì)有助于應(yīng)用程序適用新的參數(shù)配置,通過(guò)把你預(yù)置的可替換資源(比如對(duì)應(yīng)各種屏幕方向和尺寸的layout)自動(dòng)重新裝載進(jìn)入應(yīng)用程序的方式來(lái)實(shí)現(xiàn)。

多activity的合作

當(dāng)activity啟動(dòng)另一個(gè)activity時(shí),它倆生命周期的狀態(tài)都會(huì)發(fā)生轉(zhuǎn)換。 第一個(gè)activity paused并stopped(盡管它也可能不會(huì)被stopped,如果它仍然后臺(tái)可見(jiàn)的話),而另一個(gè)activity是被created。 如果這兩個(gè)activity共用了保存在磁盤(pán)或其它地方的數(shù)據(jù),那么請(qǐng)明白:在第二個(gè)activity被created之前,第一個(gè)activity還沒(méi)有完全被stopped,這點(diǎn)非常重要。 或多或少,第二個(gè)activity的啟動(dòng)進(jìn)程與第一個(gè)activity的關(guān)閉進(jìn)程在時(shí)間上會(huì)發(fā)生重疊。



from-->http://www.android-doc.com/guide/components/activities.html

最后編輯于
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 啟動(dòng)與銷(xiāo)毀Activity 不同于使用 main() 方法啟動(dòng)應(yīng)用的其他編程范例,Android 系統(tǒng)會(huì)通過(guò)調(diào)用對(duì)...
    安卓Boy閱讀 1,879評(píng)論 3 5
  • 在前面的文章里我們知道了 Activity 是一個(gè)應(yīng)用組件,用戶(hù)可與其提供的屏幕進(jìn)行交互,以執(zhí)行撥打電話、拍攝照片...
    常思行閱讀 1,027評(píng)論 1 1
  • Activity https://developer.android.com/guide/components/a...
    XLsn0w閱讀 770評(píng)論 0 4
  • 啟動(dòng)與銷(xiāo)毀Activity 不同于使用 main() 方法啟動(dòng)應(yīng)用的其他編程范例,Android 系統(tǒng)會(huì)通過(guò)調(diào)用對(duì)...
    mouekz閱讀 717評(píng)論 0 0
  • 本文摘要:本文向你介紹教育家李希貴的教學(xué)理念,我之前也寫(xiě)過(guò)一個(gè)布衣教育家薛瑞萍的教育理念:。巧得是兩人都是語(yǔ)文老師...
    石頭聊家庭教育閱讀 1,852評(píng)論 0 11

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