Activity學(xué)習(xí)(一):生命周期

正常生命周期

來看看最正常的Activity的啟動流程:

  1. 啟動MainActivity時調(diào)用如下:


  2. 這時啟動SecondActivity,調(diào)用如下:


  3. 再次返回MainActivity

    看到這個結(jié)果時,發(fā)現(xiàn)MainActivity的 onPause() 的方法優(yōu)先于SecondActivity的 onCreate() 锌妻。也就是說新界面啟動的時候,舊界面會先將 onPause() 執(zhí)行完畢蛇数,所以為了不影響新界面的啟動,最好不要在 onPause() 中有過多的操作夹界。
    官方文檔中也說戈次,不要在 onPause() 有重量級操作轩勘。

異常生命周期

1. 屏幕旋轉(zhuǎn)
  • 觀察日志,當(dāng)屏幕旋轉(zhuǎn)的時候怯邪,Activity會先將自己銷毀掉绊寻。然后重新創(chuàng)建這個Activity。
  • 在銷毀過程中悬秉,會調(diào)用Activity的 onSaveInstanceState() 方法澄步,可以在這里存儲一些數(shù)據(jù)。
  • 在重建的過程中和泌,會調(diào)用Activity的 onRestoreInstanceState() 方法村缸。做一些數(shù)據(jù)的重新賦值。
  • onSaveInstanceState() 這個方法是在 onStop() 之前執(zhí)行武氓,和onPause() 沒有先后關(guān)系梯皿,既可能在onPause()之前,也可能在onPause()之后聋丝。
  • onRestoreInstanceState() 方法是在onStart() 之后執(zhí)行索烹。

onSaveInstanceState() 執(zhí)行的時間:

  • 點擊home鍵回到主頁或長按后選擇運行其他程序
  • 按下電源鍵關(guān)閉屏幕
  • 啟動新的Activity
  • 橫豎屏切換時,肯定會執(zhí)行
旋轉(zhuǎn)屏幕弱睦,禁止重新創(chuàng)建Activity:

Android可以為不同的尺寸和橫豎屏配置不同資源百姓。
所以當(dāng)Android切換了橫豎屏的時候,需要加載不同的資源况木。
這時就必須使用新的資源重新創(chuàng)建Activity垒拢。
如果你不想讓Activity重新創(chuàng)建,可以在 AndroidManifest.xml 中配置Activity火惊。

<activity android:name=".MainActivity"
    android:configChanges="orientation|screenSize" />

然后當(dāng)屏幕旋轉(zhuǎn)的時候求类,只會調(diào)用Activity的 onConfigurationChanged() 方法。

2. 內(nèi)存不足導(dǎo)致改變

當(dāng)系統(tǒng)的內(nèi)存不足的時候屹耐,系統(tǒng)會按照Activity的優(yōu)先級去殺死所在的進程尸疆。

進程的優(yōu)先級如下:

  • 前臺進程:正在交互的界面
  • 可見進程:可見但不是前臺界面(前臺界面是透明主題等等)
  • 服務(wù)進程:不屬于以上兩種,但是包含服務(wù)的進程
  • 后臺進程:一個最普通的Activity按下了Home鍵惶岭,會導(dǎo)致onStop()方法執(zhí)行寿弱,就會變成后臺進程
  • 空進程:不屬于以上種類,就是這類了按灶。

內(nèi)存不足時候引發(fā)的系統(tǒng)將進程殺死症革,如果這個進程是包含Activity,那么這個Activity的數(shù)據(jù)的存儲和恢復(fù)都和上面的流程是一致的鸯旁,都是調(diào)用 onSaveInstanceState()onRestoreInstanceState() 方法來存儲和恢復(fù)數(shù)據(jù)噪矛。
所以一個進程上沒有包含四大組件量蕊,是很容易被系統(tǒng)殺死的。
所以后臺數(shù)據(jù)處理最好使用Service去進行艇挨,以保證一定的優(yōu)先級残炮。

3. Activity持久化存儲

這是 API 21 以后,才有的新特性缩滨。
新增了三個方法吉殃,每個方法都多了一個參數(shù) PersistableBundle

onCreate(Bundle savedInstanceState, PersistableBundle persistentState)

onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)

onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState)

文檔對 PersistableBundle 的描述:是一個鍵值對的集合,可以安全的將數(shù)據(jù)存儲到磁盤并從磁盤恢復(fù)楷怒。
所以實現(xiàn)這幾個方法,程序會具有系統(tǒng)關(guān)機重啟后數(shù)據(jù)恢復(fù)的能力瓦灶。

想要使得這三個方法被調(diào)用鸠删,必須在AndroidManifest.xml 中做配置:

<activity
    android:name=".MainActivity"
    android:persistableMode="persistAcrossReboots" />

我在一開始使用AS寫代碼時候,經(jīng)常會寫錯方法贼陶,發(fā)現(xiàn)明明實現(xiàn)了onCreate()刃泡,界面上卻是空白的。
仔細一看才發(fā)現(xiàn)復(fù)寫的onCreate()是兩個參數(shù)的方法碉怔。
所以一定要注意烘贴,** 默認情況下這兩個參數(shù)的 onCreate() 是不會被調(diào)用的**,如果寫錯了撮胧,界面上會是空白桨踪,并且不會報錯。

但是這個功能我實驗了很多次芹啥,但是 并沒有成功锻离。也不知是使用的方法不對還是手機的原因。所以有哪個大神對于這個有正確使用方法墓怀,麻煩告知我一下汽纠。

Activity學(xué)習(xí)(二)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市傀履,隨后出現(xiàn)的幾起案子虱朵,更是在濱河造成了極大的恐慌,老刑警劉巖钓账,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碴犬,死亡現(xiàn)場離奇詭異,居然都是意外死亡官扣,警方通過查閱死者的電腦和手機翅敌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惕蹄,“玉大人蚯涮,你說我怎么就攤上這事治专。” “怎么了遭顶?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵张峰,是天一觀的道長。 經(jīng)常有香客問我棒旗,道長喘批,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任铣揉,我火速辦了婚禮饶深,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逛拱。我一直安慰自己敌厘,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布朽合。 她就那樣靜靜地躺著俱两,像睡著了一般。 火紅的嫁衣襯著肌膚如雪曹步。 梳的紋絲不亂的頭發(fā)上宪彩,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音讲婚,去河邊找鬼尿孔。 笑死,一個胖子當(dāng)著我的面吹牛磺樱,可吹牛的內(nèi)容都是我干的纳猫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼竹捉,長吁一口氣:“原來是場噩夢啊……” “哼芜辕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起块差,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤侵续,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后憨闰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體状蜗,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年鹉动,在試婚紗的時候發(fā)現(xiàn)自己被綠了轧坎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡泽示,死狀恐怖缸血,靈堂內(nèi)的尸體忽然破棺而出蜜氨,到底是詐尸還是另有隱情,我是刑警寧澤捎泻,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布飒炎,位于F島的核電站,受9級特大地震影響笆豁,放射性物質(zhì)發(fā)生泄漏郎汪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一闯狱、第九天 我趴在偏房一處隱蔽的房頂上張望煞赢。 院中可真熱鬧,春花似錦哄孤、人聲如沸耕驰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至饭弓,卻和暖如春双饥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背弟断。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工咏花, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人阀趴。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓昏翰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親刘急。 傳聞我的和親對象是個殘疾皇子棚菊,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

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

  • 啟動與銷毀Activity 不同于使用 main() 方法啟動應(yīng)用的其他編程范例,Android 系統(tǒng)會通過調(diào)用對...
    安卓Boy閱讀 1,775評論 3 5
  • 本篇博客是筆者看過《Android開發(fā)藝術(shù)探索》才寫的叔汁,有些是借鑒了此本書的內(nèi)容统求,當(dāng)有些內(nèi)容進行了精進。 Acti...
    ClAndEllen閱讀 3,428評論 1 27
  • 轉(zhuǎn)自Android四大基本組件介紹與生命周期Android四大基本組件分別是Activity据块,Service服務(wù),...
    開子的私家地閱讀 1,416評論 0 5
  • 這是我第三遍看《Android開發(fā)藝術(shù)探索》這本書了码邻,從第一遍看的云里霧里,第二遍略微明白之后另假,我決定看第三遍像屋,并...
    陳添閱讀 861評論 2 8
  • 摘要郭亞東 王東 畫作 詩文 詩文|王東 一、五絕边篮。詠梅 玄冥懶剪裁己莺,歲歲雪催開奏甫。 莫笑梅花老,香從骨中來篇恒。 注釋...
    中原大地閱讀 160評論 0 0