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

1. 定義
即 活動,屬于 展示型組件
屬于
Android四大組件之一:Activity、Service、BroadcastReceiver、ContentProvider
2. 作用
顯示界面 & 與用戶進行交互
- 一個
Activity通常是一個界面,是四大組件唯一能被用戶感知的- 每個活動被實現(xiàn)為一個獨立的類, & 從活動基類繼承過來
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時:
-
Launcher進程通過Binder驅動向ActivityManagerService類發(fā)起startActivity請求; -
ActivityManagerService類接收到請求后,向ActivityStack類發(fā)送啟動Activity的請求; -
ActivityStack類記錄需啟動的Activity的信息 & 調整Activity棧 將其置于棧頂、通過Binder驅動 將Activity的啟動信息傳遞到ApplicationThread線程中(即Binder線程) -
ApplicationThread線程通過Handler將Activity的啟動信息發(fā)送到主線程ActivityThread - 主線程
ActivityThread類接收到該信息 & 請求后,通過ClassLoader機制加載相應的Activity類,最終調用Activity的onCreate(),最后 啟動完畢
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的交互方式
- 主要有:接口、Bundle、廣播
- 具體請看文章:Android:手把手教你 實現(xiàn)Activity 與 Fragment 相互通信(含Demo)
至此,關于Android四大組件之一的Activity講解完畢。
11. 總結
本文全面講解了 Activity,現(xiàn)在大家對 Activity應該十分了解了。Carson帶你學四大組件文章系列:
Carson帶你學Android:頁面活動-Activity
Carson帶你學Android:廣播-BroadcastReceiver
Carson帶你學Android:服務-Service
Carson帶你學Android:內存承載器-ContentProvider
歡迎關注Carson_Ho的簡書
不定期分享關于安卓開發(fā)的干貨,追求短、平、快,但卻不缺深度。
