Activity的介紹和使用(1)

一源内、Activity的介紹

Activity是Android的四大組件之一油够。是用戶操作的可視化界面;它為用戶提供了一個完成操作指令的窗口鱼响。當(dāng)我們創(chuàng)建完畢Activity之后,需要調(diào)用setContentView()方法來完成界面的顯示组底;以此來為用戶提供交互的入口丈积。在Android App 中只要能看見的幾乎都要依托于Activity,所以Activity是在開發(fā)中使用最頻繁的一種組件

二债鸡、Activity的生命周期

官方提供的生命周期切換圖


39dc804c143bc0e61b6a51666b5890e.png
onCreate:表示activity正在被創(chuàng)建江滨,這是生命周期的第一個方法,在這個方法中我們可以做一些初始化工作厌均,比如調(diào)用setContentView去加載界面布局和初始化所需數(shù)據(jù)等唬滑。
onRestart:表示1activity正在被重新打開,一般情況下棺弊,當(dāng)1activity由不可見變成可見會調(diào)用onRestart方法晶密。比如用戶按home鍵,手機(jī)回到桌面或者重新打開一個新的2activity模她,接著用戶回到1activity事稻艰,會重新調(diào)用1activity的onRestart方法。
onStart:表示activity正在被啟動侈净,即將展示出來尊勿,這時activity是可見的,但是沒有展示在前臺畜侦,也無法和用戶進(jìn)行交互运怖。這個時候可以理解為activity已經(jīng)創(chuàng)建出來,但是我們看不到夏伊。
onResume:表示activity已經(jīng)可見了摇展,并且出現(xiàn)在前臺并開始活動。和onStart的區(qū)別是溺忧,activity都創(chuàng)建出來了咏连,但是在onStart時候,activity在后臺活動(不可見)鲁森,onResume時候祟滴,activity在前臺活動(可見)
onPause:表示activity正在停止,這個方法最好不要太耗時的操作歌溉,因?yàn)闀绊懶耡ctivity的顯示垄懂。比如在1activity中啟動2activity骑晶,會先調(diào)用1activity的onPause方法,然后才會調(diào)用2activity的onResume方法草慧。
onstop:表示activity即將停止桶蛔,可以做一些重量級的回收工作,同樣不同臺耗時漫谷。
onDestro:表示activity即將銷毀仔雷,這是activity的生命周期的最后一個回調(diào),我們可以做一些回收工作和資源的釋放舔示。




三碟婆、正常情況下生命周期調(diào)用分析

1、第一次啟動一個1activity惕稻,回調(diào)如下onCreate->onStart->onResume
2竖共、當(dāng)點(diǎn)擊home按鈕之后,回調(diào)如下onPause->onStop
3俺祠、當(dāng)重新啟動1activity肘迎,回調(diào)如下onRestart->onStart->onResume
4、在1activity中啟動新的2activity锻煌,回調(diào)如下1onPause->2onCreate->2onStart->2onResume->1onStop(注:如果啟動的2activity設(shè)置透明主題,1不會走onStop方法)
5姻蚓、點(diǎn)擊back按鈕宋梧,返回1activity,回調(diào)如下2onPause->1onRestart->1onStart->1onResume->2onStop->2onDestroy
6狰挡、息屏狀態(tài)及設(shè)備屏幕被點(diǎn)亮捂龄,回調(diào)如下onPause->onStop->onRestart->onStart->onResume

四、異常情況下的生命周期分析

保存數(shù)據(jù)和數(shù)據(jù)的回復(fù)

保存數(shù)據(jù)onSaveInstanceState

activity在異常情況下終止加叁,activity會在onStop之后倦沧,通過onSaveInstanceState方法的bundle對象保存數(shù)據(jù),并把數(shù)據(jù)傳遞給onRestoreInstanceState和onCreate方法它匕。(在1activity中啟動2activity展融,也會調(diào)用onSaveInstanceState方法)

恢復(fù)數(shù)據(jù)onRestoreInstanceState

activity被異常銷毀之后,重建activity會在onStart之后調(diào)用onRestoreInstanceState方法豫柬,并獲取bundle數(shù)據(jù)告希,獲取銷毀之前的activity數(shù)據(jù)。因此我們也可以通過onRestoreInstanceState和onCreate方法判斷activity是否被重建(1activity中啟動2activity烧给,點(diǎn)擊back按鈕燕偶,不會調(diào)用這個方法)


同時,我們要知道础嫡,在onSaveInstanceState和onRestoreInstanceState方法中指么,系統(tǒng)自動會幫我做一定的恢復(fù)工作。當(dāng)activity在異常狀態(tài)下需要重建時,系統(tǒng)會幫我們保存當(dāng)前activity的視圖結(jié)構(gòu)伯诬,并且在activity重啟為我們恢復(fù)這些數(shù)據(jù)晚唇,比如文本框用戶輸入的數(shù)據(jù),listView滾動的位置等姑廉,這些view相關(guān)的狀態(tài)系統(tǒng)都會默認(rèn)為我們恢復(fù)缺亮。恢復(fù)的原因是view和activity一樣桥言,有onSaveInstanceState和onRestoreInstanceState方法萌踱。

1、橫豎屏切換生命周期的回調(diào)及狀態(tài)的保存

回調(diào)如下:onPause->onStop->OnSaveInstanceState->onDestroy->onCreate->onStart->onRestoryInstanceState->onPause

2号阿、資源內(nèi)存不足優(yōu)先級低的activity被回收并鸵,生命周期的回調(diào)及狀態(tài)的保存

activity的優(yōu)先級

1、前臺activity---正在和用戶交互的activity
2扔涧、可見單非前臺activity---activity彈出對話框园担,導(dǎo)致activity可見但不可交互
3、后臺activity--已經(jīng)暫停的activity,比如執(zhí)行了onStop枯夜,優(yōu)先級最低


當(dāng)系統(tǒng)內(nèi)存不足時弯汰,會安裝優(yōu)先級殺掉目標(biāo)activity所在的進(jìn)程,并通過onSaveInstanceState和onRestoreInstanceState方法保存和恢復(fù)數(shù)據(jù)湖雹。

五咏闪、android:ConfigChanges,用于捕獲手機(jī)狀態(tài)的改變

android中的組件Activity在manifest.xml文件中可以指定參數(shù)android:ConfigChanges摔吏,用于捕獲手機(jī)狀態(tài)的改變鸽嫂。 在Activity中添加了android:configChanges屬性,在當(dāng)所指定屬性(Configuration Changes)發(fā)生改變時征讲,通知程序調(diào)用onConfigurationChanged()函數(shù)据某。
設(shè)置方法:將下列字段用“|”符號分隔開,例如:“l(fā)ocale|navigation|orientation”


de84fb75cb6e0a95951b921b7d25987.png

橫豎屏切換的時候诗箍,不重新構(gòu)建activity方法

在manifest.xml文件中癣籽,給activity添加配置configChange

<activity android:name=".MainActivity" android:configChanges="orientation|screenSize" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

并且在activity中重寫onConfigurationChanged方法

override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)
        Log.d("ysl","onConfigurationChanged")
        when (newConfig.orientation) {
            Configuration.ORIENTATION_LANDSCAPE -> {
                //橫屏
            }
            Configuration.ORIENTATION_PORTRAIT -> {
                //豎屏
            }
            else->{

            }
        }
    }

當(dāng)activity配置android:configChanges="orientation|screenSize" ,橫豎屏切換不會調(diào)用onSaveInstanceState和onRestoreInstanceState方法滤祖,只會調(diào)用onConfigurationChanged方法才避。

六、禁止屏幕旋轉(zhuǎn)的方法

1氨距、在AndroidManifest.xml中設(shè)置activity 中的android:screenOrientation 屬性值
2桑逝、在Activity 中調(diào)用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市俏让,隨后出現(xiàn)的幾起案子楞遏,更是在濱河造成了極大的恐慌茬暇,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寡喝,死亡現(xiàn)場離奇詭異糙俗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)预鬓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門巧骚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人格二,你說我怎么就攤上這事劈彪。” “怎么了顶猜?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵沧奴,是天一觀的道長。 經(jīng)常有香客問我长窄,道長滔吠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任挠日,我火速辦了婚禮疮绷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嚣潜。我一直安慰自己冬骚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布郑原。 她就那樣靜靜地躺著,像睡著了一般夜涕。 火紅的嫁衣襯著肌膚如雪犯犁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天女器,我揣著相機(jī)與錄音酸役,去河邊找鬼。 笑死驾胆,一個胖子當(dāng)著我的面吹牛涣澡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丧诺,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼入桂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了驳阎?” 一聲冷哼從身側(cè)響起抗愁,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤馁蒂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蜘腌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沫屡,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年撮珠,在試婚紗的時候發(fā)現(xiàn)自己被綠了沮脖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡芯急,死狀恐怖勺届,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情志于,我是刑警寧澤涮因,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站伺绽,受9級特大地震影響养泡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奈应,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一澜掩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杖挣,春花似錦肩榕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至歌殃,卻和暖如春乔妈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背氓皱。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工路召, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人波材。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓股淡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親廷区。 傳聞我的和親對象是個殘疾皇子唯灵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • Android官方文檔和其他不少資料都對Activity生命周期進(jìn)行了詳細(xì)介紹,結(jié)合資料本文將對Activity生...
    老勇閱讀 733評論 2 3
  • 一隙轻、Activity的生命周期 本節(jié)內(nèi)容將生命周期的情況分為兩部分介紹早敬,第一部分先了解典型的生命周期的7個部分及A...
    小池laucherish閱讀 543評論 0 0
  • Activity 是一個應(yīng)用組件忌傻,用戶可與其提供的屏幕進(jìn)行交互,以執(zhí)行撥打電話搞监、拍攝照片水孩、發(fā)送電子郵件或查看地圖等...
    岳小川閱讀 480評論 0 3
  • 一、把第一個程序運(yùn)行起來琐驴。 二俘种、Android程序結(jié)構(gòu)解釋 三、Activity是什么 Activity是Andr...
    joy_藍(lán)蜘蛛閱讀 652評論 0 0
  • 一直都有提筆想寫些什么绝淡,但每每提筆宙刘,又無從下手,感覺一切都是混亂的牢酵,沒有自成體系悬包。近來正好閑暇頗多,便下決心整理一...
    隨風(fēng)_04a7閱讀 609評論 0 2