Activity

目錄

  1. 生命周期
  2. 任務棧/啟動模式
  3. onSaveInstanceState()
  4. scheme跳轉協(xié)議
  5. 補充結論

1. 生命周期

參考:Activity在特定場景下的生命周期

  • 首次啟動
  • 按下返回鍵
  • 按Home鍵,再次打開
  • 屏幕旋轉
  • 打開SecondActivity

2. 任務棧/啟動模式

可以在 manifest 中設置 <activity/> 的 launchMode 屬性:

  • Standard:總是允許創(chuàng)建新的相同的 Activity (默認)
  • SingleTop:當棧的最頂端有相同的 Activity 時骚揍,只創(chuàng)建一個燎含,當不同層次有相同的 Activity,允許創(chuàng)建新的 Activity
  • SingleTask:即 single in task持偏,該實例在本棧中只存在一個
  • SingleInstance:在本棧中只存在一個實例(一個棧中只允許一個 Activity 存在)

3. onSaveInstanceState()

何時調(diào)用:

  • 當某個 Activity “容易”被系統(tǒng)銷毀時
  • 屏幕橫豎屏切換時
  • 前兩種是系統(tǒng)回調(diào),還有一情況是在程序代碼中自己調(diào)用了該方法

注意事項:

  • 當用戶自己按下 Back 鍵,屬于主動銷毀 Activity甘磨,此時是不會回調(diào)該方法的
  • 什么叫容易:當 Activity 不能被完全看見卻又未執(zhí)行onDestroy方法時(即處于 onPaus 或 onStop 狀態(tài)下)逞泄,系統(tǒng)就可能因為內(nèi)存緊缺而銷毀這些 Activity患整。
  • 系統(tǒng)銷毀這些 Activity 時會依據(jù)其所在進程的優(yōu)先級拜效,優(yōu)先級越低越容易被銷毀:
    前臺進程 > 可見進程 > 服務進程 > 后臺進程 > 空進程,通常被銷毀都是處在后臺進程這個級別

做了什么:

  • 系統(tǒng)回調(diào)該方法時會保存與 UI 有關的信息各谚,具體講紧憾,會為布局中的每個 View 回調(diào) onSaveInstanceState() 方法來保存視圖信息,以便在重建 Activity 時恢復原狀昌渤,但該 View 需要包含id屬性
  • 對 Activity 中的一些成員變量系統(tǒng)默認是不會恢復存儲的赴穗,但它們有些又非常重要,此時就需要重寫該方法將有關信息存儲在 Bundle 數(shù)據(jù)包中

onRestoreInstance():

  • onSaveInstanceState()和onRestoreInstance()的回調(diào)并不是成對的膀息,onRestoreInstance()方法被調(diào)用的前提是Activity的確被系統(tǒng)銷毀了
  • 盡管onSaveInstanceState()方法已經(jīng)被調(diào)用了(無論是系統(tǒng)調(diào)用的還是自己調(diào)用的)般眉,也只是說明Activity存在被回收銷毀的可能性,若沒有被回收而正常返回潜支,則只會回調(diào)onRestart(方法
  • 在 onSaveInstanceState() 中保存的數(shù)據(jù)甸赃,重建 Activity 時會傳到 onRestoreInstance() 和 onCreate()的Bundle參數(shù)中,不過我們通常會在onCreate()方法中去恢復數(shù)據(jù)

一些結論:

  • Activity 在不可見(或不完全可見)但又未執(zhí)行 onDestroy() 時可能被系統(tǒng)回收冗酿,此時會回調(diào) onSaveInstanceState() 保存實例信息埠对。但由用戶主動銷毀的情況是不會調(diào)用該方法的
  • 只有 Activity 真的被系統(tǒng)銷毀了,重建時才會回調(diào) onRestoreInstance() 方法恢復數(shù)據(jù)(否則 Bundle 為空)裁替,但通常的是在 onCreate() 的Bundle中恢復數(shù)據(jù)

4. scheme跳轉協(xié)議

應用場景:

  • 服務端下發(fā)URL路徑项玛,客戶端根據(jù)URL跳轉頁面
  • 從H5頁面跳轉到相應的App的Activity
  • App根據(jù)URL跳轉到另一個App的指定頁面

5. 補充結論

  • onStart()和onStop是從是否可見這個角度來回調(diào)的,而onResume()和onPause()是從是否位于前臺這個角度來回調(diào)的
  • 舊的Activity的onPause()執(zhí)行完后新的Activity才能Resume胯究,所以不能在onPause()和onStop()中執(zhí)行耗時操作稍计,特別是onPause()
  • 當系統(tǒng)配置發(fā)生變化后,Activity會被重建裕循,若不想Activity重建臣嚣,可以給Activity指定configChanges屬性,這樣取而代之的是回調(diào)Activity的onConfigchangd()方法
  • TaskAffinity屬性標識了一個Activity所需的任務棧剥哑,默認情況下為應用的包名硅则。可以給每個Activity都單獨指定TaskAffinity屬性株婴,它的值是一個字符串怎虫,中間必須包含包名分隔符"."。它和singleTask啟動模式配合使用才能生效
  • 棧內(nèi)復用的Activity在重新回到前臺時會回調(diào)onNewIntent()方法困介,但onCreate()大审、onStart()不會被調(diào)用
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市座哩,隨后出現(xiàn)的幾起案子徒扶,更是在濱河造成了極大的恐慌,老刑警劉巖根穷,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姜骡,死亡現(xiàn)場離奇詭異导坟,居然都是意外死亡,警方通過查閱死者的電腦和手機圈澈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門惫周,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人康栈,你說我怎么就攤上這事递递。” “怎么了谅将?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵漾狼,是天一觀的道長。 經(jīng)常有香客問我饥臂,道長,這世上最難降的妖魔是什么似踱? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任隅熙,我火速辦了婚禮,結果婚禮上核芽,老公的妹妹穿的比我還像新娘囚戚。我一直安慰自己,他們只是感情好轧简,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布驰坊。 她就那樣靜靜地躺著,像睡著了一般哮独。 火紅的嫁衣襯著肌膚如雪拳芙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天皮璧,我揣著相機與錄音舟扎,去河邊找鬼。 笑死悴务,一個胖子當著我的面吹牛睹限,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播讯檐,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼羡疗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了别洪?” 一聲冷哼從身側響起叨恨,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蕉拢,沒想到半個月后特碳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诚亚,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年午乓,在試婚紗的時候發(fā)現(xiàn)自己被綠了站宗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡益愈,死狀恐怖梢灭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蒸其,我是刑警寧澤敏释,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站摸袁,受9級特大地震影響钥顽,放射性物質發(fā)生泄漏。R本人自食惡果不足惜靠汁,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一蜂大、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蝶怔,春花似錦奶浦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沐悦,卻和暖如春成洗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背所踊。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工泌枪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秕岛。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓碌燕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親继薛。 傳聞我的和親對象是個殘疾皇子修壕,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

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

  • Activity https://developer.android.com/guide/components/a...
    XLsn0w閱讀 705評論 0 4
  • 學習資料: Android群英傳 Android開發(fā)藝術探索 Activity是與用戶交互的第一接口,感覺說是四大...
    英勇青銅5閱讀 2,504評論 15 41
  • Activity 是一個應用組件遏考,用戶可與其提供的屏幕進行交互慈鸠,以執(zhí)行撥打電話、拍攝照片灌具、發(fā)送電子郵件或查看地圖等...
    岳小川閱讀 482評論 0 3
  • Activity是一個應用組件青团,用戶可與其提供的屏幕進行交互譬巫。以執(zhí)行撥打電話,拍攝照片督笆,發(fā)送電子郵件或查看地圖等操...
    DanieX閱讀 1,096評論 0 4
  • 此刻剛剛吃完一頓火鍋芦昔,分享食物的好種子開花得來的,這頓火鍋的來的突然而意外娃肿。猛烈的隨喜贊嘆自己咕缎。我知道我在用一套全...
    花開見佛笑閱讀 108評論 0 3