Carson帶你學Android:關于Activity的知識都在這里了


前言

  • Activity屬于 Android的四大組件之一
  • Carons將獻上一份 Activity的學習攻略馆蠕,包括其生命周期益老、啟動模式、啟動方式等等朽砰,希望你們會喜歡。

目錄

示意圖

1. 定義

即 活動膝蜈,屬于 展示型組件

屬于Android四大組件之一:Activity锅移、ServiceBroadcastReceiver饱搏、ContentProvider


2. 作用

顯示界面 & 與用戶進行交互

  1. 一個Activity通常是一個界面非剃,是四大組件唯一能被用戶感知的
  2. 每個活動被實現(xiàn)為一個獨立的類, & 從活動基類繼承過來
  3. Activity之間通過Intent進行通信

3. 生命周期

  • 具體如下圖
示意圖

更加詳細請看文章:Android基礎:3分鐘詳解Activity生命周期


4. 啟動模式

  • Activity的啟動模式有4種推沸,具體如下
示意圖
  • 4種啟動模式的區(qū)別
示意圖

更加詳細請看文章:Android基礎:最易懂的Activity啟動模式詳解


5. 啟動方式

  • 啟動Activity的方式主要是:顯式Intent & 隱式Intent
  • 具體介紹如下:

5.1 顯式Intent(3種)

// 1. 使用構造函數(shù) 傳入 Class對象
 Intent intent = new Intent(this, SecondActivity.class); 
 startActivity(intent);

// 2. 使用 setClassName()傳入 包名+類名 / 包Context+類名
 Intent intent = new Intent(); 
 // 方式1:包名+類名
 // 參數(shù)1 = 包名稱
 // 參數(shù)2 = 要啟動的類的全限定名稱 
 intent.setClassName("com.hc.hctest", "com.hc.hctest.SecondActivity"); 

 // 方式2:包Context+類名
 // 參數(shù)1 = 包Context备绽,可直接傳入Activity
 // 參數(shù)2 = 要啟動的類的全限定名稱 
 intent.setClassName(this, "com.hc.hctest.SecondActivity"); 

 startActivity(intent);

// 3. 通過ComponentName()傳入 包名 & 類全名
 Intent intent = new Intent(); 
 // 參數(shù)1 = 包名稱
 // 參數(shù)2 = 要啟動的類的全限定名稱 
 ComponentName cn = new ComponentName("com.hc.hctest", "com.hc.hctest.SecondActivity"); 
 intent.setComponent(cn); 
 startActivity(intent);


5.2 隱式Intent

// 通過Category、Action設置
Intent intent = new Intent(); 
intent.addCategory(Intent.CATEGORY_DEFAULT); 
intent.addCategory("com.hc.second"); 
intent.setAction("com.hc.action"); 
startActivity(intent);

5.3 匹配規(guī)則

示意圖

更加詳細請看文章:Android:關于 Intent組件的那些小事(介紹鬓催、使用方法等)


6. 啟動過程

Activity的啟動過程具體如下:

6.1 示意圖

示意圖

6.2 具體描述

當請求啟動Activity時:

  1. Launcher進程通過Binder驅(qū)動向ActivityManagerService類發(fā)起startActivity請求肺素;
  2. ActivityManagerService類接收到請求后,向ActivityStack類發(fā)送啟動Activity的請求宇驾;
  3. ActivityStack類記錄需啟動的Activity的信息 & 調(diào)整Activity棧 將其置于棧頂倍靡、通過 Binder 驅(qū)動 將 Activity 的啟動信息傳遞到ApplicationThread線程中(即Binder線程)
  4. ApplicationThread線程通過HandlerActivity的啟動信息發(fā)送到主線程ActivityThread
  5. 主線程ActivityThread類接收到該信息 & 請求后,通過ClassLoader機制加載相應的Activity類课舍,最終調(diào)用ActivityonCreate()塌西,最后 啟動完畢

7. 卡頓原因

Activity的卡頓原因主要歸結如下:

示意圖

關于內(nèi)存泄漏 & 性能優(yōu)化他挎,請看系列文章:
Android性能優(yōu)化:這是一份全面&詳細的內(nèi)存優(yōu)化指南
Android性能優(yōu)化:手把手帶你全面了解 內(nèi)存泄露 & 解決方案
Android性能優(yōu)化:那些關于Bitmap圖片資源優(yōu)化的小事
Android性能優(yōu)化:手把手帶你全面了解 繪制優(yōu)化
Android性能優(yōu)化:布局優(yōu)化 詳細解析(含<include>、<ViewStub>捡需、<merge>講解 )


8. 加速啟動方式

加速啟動Activity的方式歸結如下:

示意圖

9. 緩存方式(狀態(tài)保存)

  • 問題描述
示意圖
  • 具體說明
示意圖

10. Activity 與Fragment的交互方式

至此站辉,關于Android四大組件之一的Activity講解完畢呢撞。


11. 總結

本文全面講解了 Activity,現(xiàn)在大家對 Activity應該十分了解了饰剥。Carson帶你學四大組件文章系列:

Carson帶你學Android:頁面活動-Activity
Carson帶你學Android:廣播-BroadcastReceiver
Carson帶你學Android:服務-Service
Carson帶你學Android:內(nèi)存承載器-ContentProvider


歡迎關注Carson_Ho的簡書

不定期分享關于安卓開發(fā)的干貨殊霞,追求短、平捐川、快脓鹃,但卻不缺深度


請點贊古沥!因為你的鼓勵是我寫作的最大動力瘸右!

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市岩齿,隨后出現(xiàn)的幾起案子太颤,更是在濱河造成了極大的恐慌,老刑警劉巖盹沈,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件龄章,死亡現(xiàn)場離奇詭異,居然都是意外死亡乞封,警方通過查閱死者的電腦和手機做裙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肃晚,“玉大人锚贱,你說我怎么就攤上這事」卮” “怎么了拧廊?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長晋修。 經(jīng)常有香客問我吧碾,道長,這世上最難降的妖魔是什么墓卦? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任倦春,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘溅漾。我一直安慰自己山叮,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布添履。 她就那樣靜靜地躺著,像睡著了一般脑又。 火紅的嫁衣襯著肌膚如雪暮胧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天问麸,我揣著相機與錄音往衷,去河邊找鬼。 笑死严卖,一個胖子當著我的面吹牛席舍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哮笆,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼来颤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了稠肘?” 一聲冷哼從身側響起福铅,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎项阴,沒想到半個月后滑黔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡环揽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年略荡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片歉胶。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡汛兜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出跨扮,到底是詐尸還是另有隱情序无,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布衡创,位于F島的核電站帝嗡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏璃氢。R本人自食惡果不足惜哟玷,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧巢寡,春花似錦喉脖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谦絮,卻和暖如春题诵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背层皱。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工性锭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叫胖。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓草冈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瓮增。 傳聞我的和親對象是個殘疾皇子怎棱,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345