前言
-
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
驅(qū)動向ActivityManagerService
類發(fā)起startActivity
請求肺素; -
ActivityManagerService
類接收到請求后,向ActivityStack
類發(fā)送啟動Activity
的請求宇驾; -
ActivityStack
類記錄需啟動的Activity
的信息 & 調(diào)整Activity
棧 將其置于棧頂倍靡、通過Binder
驅(qū)動 將Activity
的啟動信息傳遞到ApplicationThread
線程中(即Binder
線程) -
ApplicationThread
線程通過Handler
將Activity
的啟動信息發(fā)送到主線程ActivityThread
- 主線程
ActivityThread
類接收到該信息 & 請求后,通過ClassLoader
機制加載相應的Activity
類课舍,最終調(diào)用Activity
的onCreate()
塌西,最后 啟動完畢
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的交互方式
- 主要有:接口办桨、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:內(nèi)存承載器-ContentProvider
歡迎關注Carson_Ho的簡書
不定期分享關于安卓開發(fā)的干貨殊霞,追求短、平捐川、快脓鹃,但卻不缺深度。