Carson帶你學Android:關(guān)于Activity的知識都在這里了


前言

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

目錄

示意圖

1. 定義

即 活動,屬于 展示型組件

屬于Android四大組件之一:ActivityServiceBroadcastReceiverContentProvider


2. 作用

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

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

3. 生命周期

  • 具體如下圖
示意圖

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


4. 啟動模式

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

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


5. 啟動方式

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

5.1 顯式Intent(3種)

// 1. 使用構(gòu)造函數(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設(shè)置
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:關(guān)于 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機制加載相應(yīng)的Activity類,最終調(diào)用ActivityonCreate(),最后 啟動完畢

7. 卡頓原因

Activity的卡頓原因主要歸結(jié)如下:

示意圖

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


8. 加速啟動方式

加速啟動Activity的方式歸結(jié)如下:

示意圖

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

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

10. Activity 與Fragment的交互方式

至此,關(guān)于Android四大組件之一的Activity講解完畢。


11. 總結(jié)

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

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


歡迎關(guān)注Carson_Ho的簡書

不定期分享關(guān)于安卓開發(fā)的干貨,追求短、平、快,但卻不缺深度


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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。