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


前言

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

目錄

示意圖

1. 定義

即 活動,屬于 展示型組件

屬于Android四大組件之一:ActivityServiceBroadcastReceiver、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驅動向ActivityManagerService類發(fā)起startActivity請求;
  2. ActivityManagerService類接收到請求后,向ActivityStack類發(fā)送啟動Activity的請求;
  3. ActivityStack類記錄需啟動的Activity的信息 & 調整Activity棧 將其置于棧頂、通過 Binder 驅動 將 Activity 的啟動信息傳遞到ApplicationThread線程中(即Binder線程)
  4. ApplicationThread線程通過HandlerActivity的啟動信息發(fā)送到主線程ActivityThread
  5. 主線程ActivityThread類接收到該信息 & 請求后,通過ClassLoader機制加載相應的Activity類,最終調用ActivityonCreate(),最后 啟動完畢

7. 卡頓原因

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

示意圖

關于內存泄漏 & 性能優(yōu)化,請看系列文章:
Android性能優(yōu)化:這是一份全面&詳細的內存優(yōu)化指南
Android性能優(yōu)化:手把手帶你全面了解 內存泄露 & 解決方案
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:內存承載器-ContentProvider


歡迎關注Carson_Ho的簡書

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


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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容