2 小時考試衝刺複習教材
使用方法:依時間表逐節閱讀。每節有「核心概念 → 重點整理 → 易考點 → 自我檢測」。建議準備白紙邊看邊抄畫。
學習時間分配表 (Total: 120 分鐘)
| 時段 | 時間 | 主題 | 對應單元 |
|---|---|---|---|
| §1 | 10 min | Mobile App 基礎 & 開發流程 | U1, U2 |
| §2 | 15 min | Android SDK & 基本 Java | U3 |
| §3 | 20 min | Activity & Lifecycle | U4 |
| §4 | 10 min | Visual Design 視覺設計 | U5 |
| §5 | 10 min | Colour Model & Digital Image | U6 |
| §6 | 10 min | UI Design & Material Design | U7 |
| §7 | 15 min | OOP 進階 & Event Handling | U8 |
| §8 | 15 min | Intent / Service / Fragment | U9 |
| §9 | 10 min | Broadcast / Content Provider / Storage | U10 |
| §10 | 5 min | 速記表 + 模擬題自測 | All |
§1. Mobile App 基礎 & 開發流程 (U1, U2) — 10 分鐘
1.1 三大類 Mobile App(必背)
| 類型 | 技術 | 優點 | 缺點 |
|---|---|---|---|
| Native App | Java/Kotlin (Android), Swift/Obj-C (iOS) | 效能高、可直接存取硬件 (Camera, GPS, Sensor)、可離線 | 需為每平台分別開發 |
| Web App | HTML/CSS/JavaScript/PHP | 跨平台、只需瀏覽器 | 無法直接用硬件、需網路 |
| Hybrid App | 在 WebView 內包 HTML | 跨平台 + 部分硬件存取 | 效能介乎兩者 |
何時選 Native? 需要 instant response (遊戲)、特定 sensor、離線使用、特定 file system。
1.2 Multilayer Mobile System(6 層,從下到上)
┌────────────────────────┐
│ Application 應用程式 │ ← 開發者最常接觸
│ Application Framework │ ← Android Java API
│ Operating System (OS) │ ← Android / iOS
│ Device (硬件) │ ← 手機、平板、手錶
│ Network │ ← 2G/3G/4G/5G
│ Operator │ ← 電訊商
└────────────────────────┘
1.3 Android Stack(5 層,由下到上 — 考試常考)
- Linux Kernel — 硬件驅動、記憶體、CPU 管理
- Hardware Abstraction Layer (HAL) — 將硬件抽象成統一介面
- Native C/C++ Libraries + Android Runtime (ART) — 執行 .dex
- Application Framework — Activity Manager / Window Manager / Notification 等
- Applications — 系統 App 與第三方 App
口訣:Linux → HAL → Native+ART → Framework → Apps
1.4 Mobile OS 比較
- Android (Google):Linux 內核、Java/Kotlin、ART 執行
.dex - iOS / iPadOS (Apple):源自 macOS / Unix、Swift / Objective-C
- HarmonyOS (Huawei):可跨多裝置、ArkTS + DevEco Studio
1.5 開發流程 5 階段
- Initiation / Requirement / Planning — 收集 functional 與 non-functional requirements
- Design — UI/UX wireframe、架構設計(MVC/MVP)
- Implementation — 寫程式 + 單元測試
- Evaluation & Distribution — 測試後上架 (Google Play / App Store)
- Operation & Maintenance — 更新、修 Bug
1.6 4 個測試 Level(順序很重要)
Unit Testing → Integration Testing → System Testing → Acceptance Testing
- Black-box = 測功能,不看內部
- White-box = 測內部結構
- Alpha = 內部測試版;Beta = 給目標用戶測
1.7 Hardware / Software 約束
- Hardware:螢幕小、輸入區小、電量、CPU/GPU、儲存空間有限
- Software:RAM 管理、Activity lifecycle、API fragmentation
1.8 易考重點 ⭐
- Functional requirement vs Non-functional requirement 的定義差別
- MVC = Model(資料)+ View(顯示)+ Controller(控制輸入)
- Android 用 ART (Ahead-Of-Time, AOT);標準 Java 用 JVM (Just-In-Time, JIT)
§2. Android SDK & 基本 Java (U3) — 15 分鐘
2.1 Android SDK 核心組件
- SDK Platforms — 每個 Android 版本對應的 API
- SDK Platform-tools —
adb,fastboot等裝置工具 - Gradle + Android Gradle Plugin (AGP) — 自動化 build
- SDK Build-Tools — 編譯成 APK / AAB
- Android Emulator — 虛擬裝置 AVD
2.2 Android Studio 專案結構(必背)
MyApp/
├── manifests/ ← AndroidManifest.xml(聲明所有元件)
├── java/ ← Java source code(Activity 類別)
├── res/ ← 非程式碼資源
│ ├── layout/ ← XML layout(畫面)
│ ├── drawable/ ← 圖片
│ ├── values/ ← strings.xml, colors.xml
│ └── mipmap/ ← App icon
└── Gradle Scripts/ ← build.gradle
2.3 Java 編譯流程(Android 專屬)
.java → (javac) → .class (bytecode)
→ (d8/dx) → .dex (Dalvik Executable)
→ 打包成 APK
→ 安裝時 ART 做 AOT 編譯成 native machine code
2.4 ART vs JVM ⭐
| 項目 | Android Runtime (ART) | Java Virtual Machine (JVM) |
|---|---|---|
| 編譯時機 | AOT (安裝時編譯) | JIT (執行時編譯) |
| 執行 | .dex bytecode |
.class bytecode |
| 啟動 | 快 | 慢 |
| 記憶體 | 低 | 高 |
| 平台 | 只給 Android | 跨平台 |
2.5 Java Class 典型結構
package mad.m3purejava; // 1) package 在最上
import android.os.Bundle; // 2) import
import androidx.appcompat.app.AppCompatActivity;
public class PureJavaActivity extends AppCompatActivity { // 3) class 宣告
// 4) Fields (欄位)
RelativeLayout aRLayout = null;
Bicycle bikeA;
Button aButA;
// 5) Constructor (若有)
// 6) Methods
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bikeA = new Bicycle("Bike A"); // 創建物件
bikeA.setSpeed(123); // 呼叫方法
setContentView(R.layout.activity_main);
}
}
2.6 Java 基本語法(重點)
- 變數宣告必須先指定資料型別:
int aNum; - 敘述以
;結尾 - 大括號
{}表示程式區塊(與 Python 不同,Java 不看縮排) - 常用 primitive 型別:
int,float,double,boolean,char,byte,short,long
2.7 Class、Object、Field、Method、Constructor
| 名稱 | 等同 | 範例 |
|---|---|---|
| Class | 藍圖 / 模板 | class Bicycle { ... } |
| Object | 實例 (instance) | Bicycle bikeA = new Bicycle("Bike A"); |
| Field | 屬性 (attribute) | String name; int speed; |
| Constructor | 創建物件時呼叫,無回傳型別,與類別同名 | public Bicycle(String n) {...} |
| Method | 行為 (behavior) | public int getSpeed() {...} |
2.8 使用物件 3 步驟(必背)
// 1) Declare
Bicycle bikeA;
// 2) Create + assign
bikeA = new Bicycle("Bike A");
// 3) Access (dot-notation)
bikeA.setSpeed(123);
2.9 String 特性
- String 是 immutable(一旦建立內容不可改)
- 兩種建立法:
java String a = new String("hello"); String b = "hello"; // literal +運算子可串接字串:"Class " + 3→"Class 3"
2.10 易考重點 ⭐
- Constructor 沒有 return type,名稱必須與 class 相同
- Overloading:同名 method/constructor,參數數目或型別不同
@Override注釋確保子類正確覆寫父類方法- 重點:Android 用 ART/AOT,Java SE 用 JVM/JIT
§3. Activity & Lifecycle (U4) — 20 分鐘 ⭐⭐⭐ 必考!
3.1 Activity 是什麼?
- 一個 Activity = 一個 UI 螢幕(如同桌面 App 的一個視窗)
- 通常繼承
AppCompatActivity - 每個 Activity 在
AndroidManifest.xml必須宣告
3.2 AndroidManifest.xml 範例與重點
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="mad.m1hiworld">
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.M1HiWorld">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
重點:
- <action MAIN> + <category LAUNCHER> = 主入口、會出現在 launcher
- Manifest 主要功能:
1. 宣告所有元件(Activity, Service, Receiver, Provider)
2. 申請權限 (e.g. Internet, Camera)
3. 聲明硬件需求
4. 連結外部 library
3.3 Activity Lifecycle 7 個回呼方法(必背圖)
┌─────────────┐
│ 啟動 App │
└──────┬──────┘
▼
onCreate() ◀────────────────────┐
│ │
▼ │
onStart() ◀──────┐ │
│ │ │
▼ │ │
onResume() ◀──┐ │ onRestart() │
│ │ │ │
[RUNNING] │ │ │
│ │ │ │
▼ │ │ │
onPause() │ │ │
│ │ │ │
(返回前景) ◀───┘ │ │ │
│ │ │ │
▼ │ │ │
onStop() ──┘ │ │
│ │ │
(用戶導航回來)─────────────┘ │
│ │
▼ │
onDestroy() │
│ │
▼ │
[已結束]──────(重建)──────────────┘
3.4 7 個 Callback 詳細用途
| 方法 | 何時呼叫 | 常用於 |
|---|---|---|
onCreate(Bundle) |
Activity 首次建立 | 載入 layout、初始化 UI 元件、setContentView |
onStart() |
Activity 變得可見 | 開始可見的工作 |
onResume() |
Activity 開始與用戶互動(在前景頂端) | 開始動畫、取得鏡頭資源 |
onPause() |
失去焦點但仍可見(如有對話框) | 暫停動畫、釋放資源(必須快速完成) |
onStop() |
完全被遮蓋、不可見 | 釋放重型資源 |
onRestart() |
從 stopped 重新顯示時呼叫 | 重新初始化 |
onDestroy() |
Activity 結束前最後呼叫 | 最後清理工作 |
3.5 Activity A → Activity B 流程(常考)
Activity A: onPause()
Activity B: onCreate() → onStart() → onResume() (B 取得焦點)
Activity A: onStop() (若 A 不再可見)
3.6 樣本 Activity Code
public class MainActivity extends AppCompatActivity {
int clickNo = 0; // Field
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // 必須先呼叫 super
setContentView(R.layout.activity_main); // 載入 XML layout
}
public void btnClick(View view) { // 對應 XML 的 android:onClick
Button aBut = (Button) findViewById(R.id.button);
aBut.setText("CLICKED: " + ++clickNo);
}
}
3.7 連結 XML 與 Java:兩種方式
方法 1:findViewById
<TextView android:id="@+id/aTextView" ... />
TextView tv = findViewById(R.id.aTextView);
方法 2:android:onClick
<Button android:onClick="btnClick" ... />
public void btnClick(View view) { ... }
3.8 易考重點 ⭐
onCreate()是 第一個 呼叫,onDestroy()是 最後一個- 覆寫 lifecycle 方法時,永遠先呼叫
super.xxxx() - 4 種 Android App 元件:Activity / Service / Broadcast Receiver / Content Provider
- Activity 在 stack 中以 LIFO 管理;按 BACK 鍵會
finish()並進入onDestroy()
§4. Visual Design 視覺設計 (U5) — 10 分鐘
4.1 Visual Design Elements(7 大元素)
| 元素 | 重點 |
|---|---|
| Line 線 | 屬性:長度、寬度、樣式、顏色;橫線 = 平靜,斜線 = 動感 |
| Shape 形 | 2D(長、寬);Geometric(幾何)vs Organic(有機/自然) |
| Form 形體 | 3D(含深度);可用 shading/shadow 模擬 |
| Texture 質感 | Actual(觸感)vs Visual(視覺模擬) |
| Space 空間 | 元素間的空白;3D 技巧:Overlapping、Linear Perspective、Atmospheric Perspective |
| Colour 色彩 | RGB、CMYK、HSV |
| Type 字體 | 同一 typeface 保持一致 |
另外還有 Animation / Video / Sound
4.2 3D 空間模擬 3 技巧
- Overlapping(遮蓋)— 近物擋住遠物
- Linear Perspective(線性透視)— 越遠越小
- Atmospheric Perspective(大氣透視)— 越遠飽和度/對比度越低
4.3 HSV Colour Model(重要)
- H = Hue 色相(紅、橙、黃...)
- S = Saturation 飽和度(純度,0% 灰 → 100% 純)
- V = Value 亮度(暗 ↔ 亮)
4.4 Visual Design 4 大原則
-
Unity 統一 - Intra-page:同一頁內元素一致 - Inter-page:跨頁面一致(如 HOME 按鈕永在左上角)
-
Focus / Emphasis 強調 - 用對比 (contrast) 或孤立 (isolation) 突出重點 - 可變化:位置、大小、形狀、顏色、亮度、動態
-
Visual Hierarchy 視覺階層(3 層必背) - Dominant(主導)— 最大、最吸睛、Heading - Subdominant(次主導)— Subheading - Subordinate(從屬)— Body content
-
Colour Scheme 色彩配色 - Monochromatic 單色:同色不同亮度(calm, reliable) - Analogous 類似:色環相鄰(自然、和諧) - Complementary 互補:色環相對 180°(強烈、對比高) - Warm 暖色:紅→黃(pop out) - Cool 冷色:綠→藍→紫(背景、calm)
4.5 易考重點 ⭐
- 識別 Geometric vs Organic shape
- 3 種 3D 空間技巧
- HSV 三個字母代表什麼
- 3 級 Visual Hierarchy 名稱
§5. Colour Models 與 Digital Image (U6) — 10 分鐘
5.1 三大 Colour Models 比較
| 模型 | 類型 | 用途 | 組成 |
|---|---|---|---|
| RGB | 加色 (Additive) | 螢幕顯示 (TV, 電腦) | Red + Green + Blue |
| CMYK | 減色 (Subtractive) | 印刷 | Cyan + Magenta + Yellow + Key(black) |
| HSV/HSB | 感知模型 | 人類選色 (Photoshop, Android Studio) | Hue + Saturation + Value |
5.2 RGB 數值(8-bit / channel)
(0,0,0)= 黑;(255,255,255)= 白(255,0,0)= 紅;(0,255,0)= 綠;(0,0,255)= 藍(255,255,0)= 黃;(0,255,255)= 青;(255,0,255)= 洋紅
5.3 Digital Image 三大特性
- Resolution 解析度 — Width × Height(像素數)
- Colour Depth 色深 — 每像素的 bit 數 - 1 bit → 2 色;8 bit → 256 色;24 bit → 約 1670 萬色
- Compression 壓縮 - Lossless(無損):PNG, BMP, RAW, ZIP(檔案大) - Lossy(有損):JPEG, MPEG, MP3(檔案小,質量降)
5.4 檔案大小計算 ⭐(常考)
File Size (bytes) = Width × Height × (Colour Depth / 8)
File Size (MB) = File Size (bytes) / 1,048,576
例題:640×480, 24-bit - = 640 × 480 × 3 = 921,600 bytes ≈ 0.88 MB
有壓縮比 CR:
File Size = (W × H × Colour Depth) / (8 × CR)
5.5 PPI vs DPI
- PPI = Pixels Per Inch(螢幕、數位影像)
- DPI = Dots Per Inch(實體列印)
5.6 透明度 2 種
- Transparent Pixel(binary:全透或全不透)— 用於 GIF
- Alpha Channel(支援部分透明)— 用於 PNG,ARGB 模型
- 0 / 0% = 全透;255 / 100% = 不透
5.7 Raster vs Vector
| 類型 | Raster (Bitmap) | Vector |
|---|---|---|
| 基於 | 像素 | 數學公式 |
| 縮放 | 解析度相關(放大失真) | 解析度獨立(可無限縮放) |
| 範例 | JPG, PNG | SVG, AI |
5.8 Android GUI 重點
- dp (density-independent pixel) — UI 尺寸單位
- sp (scale-independent pixel) — 文字專用,會跟隨用戶字級
5.9 Android 主要 Layout(必背)
| Layout | 特性 |
|---|---|
| ConstraintLayout | 用約束定位,最強大且高效(扁平階層) |
| LinearLayout | 直線排列(垂直或水平) |
| RelativeLayout | 相對位置擺放 |
| FrameLayout | 重疊單一區塊,子元素會疊在一起 |
| TableLayout | 行列(似 HTML table) |
| GridLayout | 網格 |
| ScrollView | 可滾動 |
| WebView | 顯示網頁 |
5.10 易考重點 ⭐
- RGB 為加色 / CMYK 為減色
- 計算影像檔案大小
- Lossless vs Lossy 範例
- dp(一般)vs sp(文字)
- View vs ViewGroup:ViewGroup 是 View 子類,可裝其他 View
§6. UI Design & Material Design (U7) — 10 分鐘
6.1 UI Design 八大通用原則(必背)
- Strive for consistency 保持一致性(Internal + External)
- Enable frequent users to use shortcuts 提供捷徑
- Offer informative feedback 提供有用回饋
- Make users feel in control 讓用戶感到掌控
- Design dialog to yield closure 對話有起承轉合
- Strive to prevent errors 預防錯誤,並協助恢復
- Allow undo and home 可復原、可回首頁
- Reduce short-term memory load 減低短期記憶負擔
6.2 4 大 Mobile App 特殊 UI 議題
- Provide essential content only — 每屏只一個主任務
- Linearize content — 垂直為主
- Optimize hardware performance — 善用 sensor / camera / GPS
- Optimize interaction sequences — 減少打字、減少頁面、減少步驟
6.3 Input Controls(常考組件)
| 元件 | 用途 |
|---|---|
EditText |
文字輸入(TextView 子類) |
SeekBar |
拖曳調整 |
CheckBox |
多選 |
RadioGroup + RadioButton |
單選 |
Switch |
開關 |
Spinner |
下拉選單 |
6.4 Human Memory 3 層
- Sensory memory 感覺記憶(< 0.5 秒;iconic / echoic / haptic)
- Short-term memory 短期記憶(幾秒至幾分鐘;只能記 4-5 項)
- Long-term memory 長期記憶(容量無限,要 Encoding → Storage → Retrieval)
6.5 Metaphor vs Affordance
- Metaphor 隱喻:用用戶已知的概念(資料夾 = 檔案系統、播放符號)
- Affordance 提示功能:3D 立體按鈕讓人想去「按」
6.6 Material Design(Google 設計系統)⭐
- 起源於 Android 5.0 Lollipop (2014)
- Material 1 — Cards, FAB, ripple
- Material 2 (Theming) — 自訂顏色、字體、形狀
- Material 3 (Material You) — Android 12+;動態色彩、個性化、現代化
- 核心元件:Floating Action Button (FAB)、Top App Bar、Cards
- 5 大原則:Consistency, Components, Theming, Motion, Accessibility
6.7 Wireframe / Prototype
- Wireframe / Storyboard — 草圖、流程示意
- Paper Prototype — 紙上原型
- Context Prototype — 放到實際使用場景測試
- Workable Prototype — 在模擬器中跑
6.8 易考重點 ⭐
- 八大 UI 原則
- STM 容量約 4–5 項
- Material Design 起源版本 (Lollipop / Android 12 for M3)
- Metaphor vs Affordance 區別
§7. OOP 進階 & Event Handling (U8) — 15 分鐘
7.1 OOP 三大特性(必背)
| 特性 | 意義 | 例 |
|---|---|---|
| Encapsulation 封裝 | 內部資料保護,只開放介面 | private 欄位 |
| Inheritance 繼承 | 子類繼承父類功能 | class B extends A |
| Polymorphism 多型 | 同名不同行為 | Overloading / Overriding |
7.2 Access Modifiers(封裝)
| Modifier | 同類 | 同 package | 子類 | 全世界 |
|---|---|---|---|---|
public |
✓ | ✓ | ✓ | ✓ |
protected |
✓ | ✓ | ✓ | ✗ |
| (default / package-private) | ✓ | ✓ | ✗ | ✗ |
private |
✓ | ✗ | ✗ | ✗ |
7.3 Inheritance(繼承)
public class MainActivity extends AppCompatActivity { ... }
// 子類 extends 父類
- Java 只允許單一繼承(每 class 只有 1 個直接 superclass)
- 沒指定 superclass → 自動繼承
Object
7.4 this vs super
| 關鍵字 | 用途 |
|---|---|
this |
指向自己(self-reference);亦可呼叫同類其他 constructor |
super |
指向 superclass;呼叫父類的方法或建構子 |
範例:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // 呼叫父類 onCreate
setContentView(R.layout.activity_main);
}
7.5 Polymorphism(多型)
Overloading(多載)— 同 class 內
void setFe(float abc); // 不同型別
void setFe(String abc);
MADClass(); // 不同參數數目
MADClass(int abc);
Overriding(覆寫)— 父類 vs 子類
- 同名、同回傳型別、同參數
- 用 @Override 注釋
Subtype Polymorphism
Food myFood = new Apple(); // Apple 是 Food 子類
7.6 Static (Class) vs Instance Field/Method
| Instance | Static (class) | |
|---|---|---|
| 屬於 | 每個物件 | 整個類別 |
| 宣告 | int age; |
static int classNum; |
| 存取 | obj.field |
ClassName.field |
7.7 Interface(介面)
- 只有 method signatures(沒有方法主體)
- 一個 class 可實作多個 interface(解決 Java 不支援多重繼承)
class MyClass implements MyInterfA, MyInterfB {
public void methForA() { ... }
public void methForB() { ... }
}
7.8 implements vs extends ⭐
| 關鍵字 | 用途 |
|---|---|
extends |
繼承 class(重用既有功能) |
implements |
實作 interface(履行契約、處理事件) |
兩者常一起用:
public class MainActivity extends AppCompatActivity
implements View.OnClickListener { ... }
7.9 Event Handling(事件處理)— 重點
3 個核心觀念:
1. Event Source — 觸發事件的元件(如 Button)
2. Event Listener — 偵聽該事件的物件(實作 Listener interface)
3. Event Handler — Listener 內被呼叫的方法(如 onClick)
7.10 Event Handling 範例(必看)
方式 A:實作 OnClickListener
public class MyActivity extends AppCompatActivity
implements View.OnClickListener {
Button aBut;
@Override
public void onClick(View v) { // Event Handler
// 處理點擊
}
@Override
protected void onCreate(Bundle s) {
super.onCreate(s);
aBut = new Button(this);
aBut.setOnClickListener(this); // 註冊 this 為 listener
}
}
方式 B:Lambda Expression
aButA.setOnClickListener(v -> {
aButA.setX(aButA.getX() + bikeA.getSpeed());
});
方式 C:android:onClick XML
<Button android:onClick="btnClick" .../>
public void btnClick(View view) { ... }
7.11 常見 Listener Interface
View.OnClickListener— 點擊View.OnTouchListener— 觸控SensorEventListener— 感應器View.OnLongClickListener— 長按
7.12 Garbage Collection
- Java 物件自動回收(不像 C 要手動 free)
- 物件 = reference type;
String b = a;兩者指向同一物件
7.13 易考重點 ⭐⭐
- 三大 OOP 特性的中英文
- Overloading vs Overriding 差別(同 class vs 父子關係)
thisvssuperimplementsvsextends- Event Handling 流程:Source → 註冊 Listener → 觸發 → 呼叫 Handler
§8. Intent, Service, Fragment (U9) — 15 分鐘
8.1 4 大 Android App 元件 ⭐⭐
- Activity — UI 螢幕
- Service — 背景執行(無 UI)
- Broadcast Receiver — 接收廣播訊息
- Content Provider — 管理跨 App 資料分享
8.2 Intent 是什麼?
- 訊息物件,用於: 1. 啟動 Activity 2. 啟動 Service 3. 發送 Broadcast
8.3 Intent 兩種類型 ⭐
| 類型 | 特性 | 範例 |
|---|---|---|
| Explicit 顯式 | 指定 目標 class 名稱(通常用於自己 App 內) | new Intent(this, WebActivity.class) |
| Implicit 隱式 | 只指定 action / data,系統自動找匹配的 App | new Intent(Intent.ACTION_VIEW, Uri.parse("https://hku.hk")) |
8.4 Intent 使用範例(必背)
Explicit Intent
Intent i = new Intent(this, WebActivity.class);
i.putExtra("KEY_URL", "https://hku.hk"); // 傳資料
startActivity(i);
WebActivity 接收
String url = getIntent().getStringExtra("KEY_URL");
Implicit Intent — 開啟網頁
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("https://hku.hk")));
Implicit Intent — 撥電話
new Intent(Intent.ACTION_DIAL, Uri.parse("tel:1234567"));
8.5 常用 Intent Action
| Action | 用途 |
|---|---|
ACTION_MAIN |
主入口 |
ACTION_VIEW |
顯示資料(網址、聯絡人...) |
ACTION_SEND |
傳送資料 |
ACTION_DIAL |
撥號 |
ACTION_WEB_SEARCH |
網頁搜尋 |
ACTION_CHOOSER |
選擇器 |
8.6 Intent Filter(manifest 內)
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
讓系統知道:「我可接收 SEND 動作且資料是 text/plain」。
8.7 Intent 接收回傳(舊式 vs 新式)
舊式:
startActivityForResult(intent, REQUEST_CODE);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { ... }
新式:使用 Activity Result APIs (AndroidX)。
8.8 Service(服務)
- 在背景執行長時間操作,無 UI
- 3 種類型: 1. Foreground Service — 用戶可見的長時間操作(如音樂播放),必須顯示 notification 2. Background Service — 不顯示給用戶,可能被系統殺掉(API 26+ 受限) 3. Bound Service — 元件可綁定到 Service 進行 IPC
8.9 Service 兩種生命週期
- Started Service:
startService()→ 持續運行 →stopService()/stopSelf() - Bound Service:
bindService()→ 與綁定者共存
8.10 Service 4 個 Lifecycle 方法
onCreate()— Service 建立onStartCommand()— 收到 startService 呼叫onBind()— 收到 bindService 呼叫onDestroy()— Service 被銷毀
8.11 Fragment(碎片)
- 一個 可重用的 UI 模組
- 不能獨立存在,必須由 Activity 或另一 Fragment 寄宿
- 有自己的 layout、lifecycle、event handling
- 優點:可重用、可組合大畫面(如平板 master-detail)
8.12 Fragment 3 種狀態
- Resumed — Activity 在前景,Fragment 可見
- Paused — Activity 失焦但仍可見
- Stopped — Activity 不可見
8.13 Fragment 主要 Lifecycle 方法(簡化版)
onAttach() → onCreate() → onCreateView() → onViewCreated()
→ onStart() → onResume()
→ [Active]
→ onPause() → onStop()
→ onDestroyView() → onDestroy() → onDetach()
8.14 Fragment 重要 Class
Fragment— 基底類FragmentManager— 管理 FragmentFragmentTransaction— 加/移/換 Fragment
8.15 Fragment 3 種類型
- Single Fragment — 單畫面
- List Fragment — 顯示清單
- Fragment Transaction — 可切換的多 Fragment
8.16 易考重點 ⭐⭐
- Explicit vs Implicit Intent 差別
putExtra/getStringExtra配對- 3 種 Service 類型
- Fragment 必須被 Activity 寄宿
onCreateView()是 Fragment 創建 UI 的方法
§9. Broadcast Receiver, Content Provider, Storage (U10) — 10 分鐘
9.1 Broadcast Receiver(廣播接收器)
- 監聽系統範圍或App 之間的廣播訊息(即 Intents)
- 必須繼承
BroadcastReceiver,覆寫onReceive(Context, Intent) - 兩類:
- System Broadcast:
ACTION_BOOT_COMPLETED,ACTION_BATTERY_LOW,AIRPLANE_MODE_CHANGED - Custom Broadcast:App 自訂
9.2 Content Provider
- 提供跨 App 資料分享機制
- 透過 URI (Universal Resource Identifier) 存取
- 提供 CRUD:新增、刪除、查詢、修改
- 通常底層由 SQLite 資料庫支援
9.3 App Permissions 3 級
| Level | 描述 |
|---|---|
| Normal | 風險低,自動授權 |
| Signature | 安裝時驗證簽章 |
| Dangerous | 可能影響隱私 → 執行時要求用戶批准(API 23+) |
9.4 Application Resources & Context
- 資源放在
/res子目錄 - 編譯時自動產生
Rclass,作為資源 ID - Application Context = Manifest + Resources,用於存取資源
java setContentView(R.layout.activity_main); findViewById(R.id.button);
9.5 App Widgets & Notification
- App Widget:可嵌入到桌面的迷你 View
- Notification:在 App UI 外顯示的訊息(出現在通知列)
9.6 Process & Thread
- 預設 App 元件都在同一個 process 的 main thread (UI thread)
- UI 必須在 main thread 更新
- 長時間工作要用 worker thread(避免凍結 UI)
- 在 Java 用
Thread或implements Runnable
9.7 Data Storage 4 種(必背)⭐
| 類型 | 用途 | API/Library |
|---|---|---|
| Internal Storage | App 私有檔案 | getFilesDir(), getCacheDir() |
| Shared Storage | 跨 App 共享(圖、影、音) | MediaStore API |
| Preferences | 小量 key-value | Jetpack Preferences |
| Databases | 結構化資料 | Room (SQLite) |
9.8 Shared Preferences vs SQLite
| Shared Preferences | SQLite | |
|---|---|---|
| 用途 | 小量 key-value | 大量結構化資料(行列) |
| 格式 | XML 檔 | 資料庫 |
| 查詢 | 用 key 取 | SQL query |
9.9 易考重點 ⭐
- 4 大主要元件(Activity/Service/Receiver/Provider)
- Permission 3 級
- 4 種 Storage 類型
- Main thread 不能阻塞,UI 更新必須在 main thread
- Content Provider 透過 URI 存取
§10. 速記表 + 模擬題自測 — 5 分鐘
10.1 必記英文術語
| 中文 | 英文 |
|---|---|
| 活動 / 螢幕 | Activity |
| 服務 | Service |
| 廣播接收器 | Broadcast Receiver |
| 內容提供者 | Content Provider |
| 顯式意圖 / 隱式意圖 | Explicit / Implicit Intent |
| 碎片 | Fragment |
| 介面 | Interface |
| 繼承 | Inheritance / extends |
| 實作 | implements |
| 多載 / 覆寫 | Overloading / Overriding |
| 封裝 | Encapsulation |
| 多型 | Polymorphism |
| Android Runtime(提前編譯) | ART (AOT) |
| Java Virtual Machine(即時編譯) | JVM (JIT) |
| 應用程式套件 | APK / AAB |
| 顯著按鈕 | FAB (Floating Action Button) |
| 密度獨立像素 | dp |
| 比例獨立像素(文字) | sp |
10.2 必記縮寫
- MAD = Mobile Application Development
- SDK = Software Development Kit
- IDE = Integrated Development Environment
- API = Application Programming Interface
- MVC = Model–View–Controller
- UI / UX = User Interface / User Experience
- HCI = Human-Computer Interaction
- GUI = Graphical User Interface
- OS = Operating System
- HAL = Hardware Abstraction Layer
- AOT / JIT = Ahead-Of-Time / Just-In-Time
- APK / AAB = Android Package / Android App Bundle
- AVD = Android Virtual Device
- ADB = Android Debug Bridge
- URI = Universal Resource Identifier
- IPC = Inter-Process Communication
10.3 速答模擬題(自我檢測)
把答案寫下來,再與正解對照。
- List the 5 layers of the Android Stack (bottom to top).
- List Android Activity lifecycle's 7 callback methods in order from launch to destroy.
- What's the difference between AOT (ART) and JIT (JVM)?
- Calculate file size of a 800×600, 24-bit colour image (uncompressed).
- Give one example each: Explicit and Implicit Intent in Java code.
- What are the 4 essential Android app components?
- List 3 OOP features and define each in one sentence.
- What's the difference between
extendsandimplements? - List the 3 types of Service in Android.
- What is Material Design? Which Android version introduced it?
參考答案
- Linux Kernel → HAL → Native C/C++ Libraries & ART → Application Framework → Applications
- onCreate → onStart → onResume → onPause → onStop → (onRestart) → onDestroy
- ART 在 App 安裝時做 AOT 編譯,啟動快、用量少;JVM 在執行時做 JIT 編譯,啟動慢但跨平台
- 800 × 600 × 24 / 8 = 1,440,000 bytes ≈ 1.37 MB
-
- Explicit:
Intent i = new Intent(this, WebActivity.class); startActivity(i); - Implicit:
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://hku.hk")));
- Explicit:
- Activity, Service, Broadcast Receiver, Content Provider
- Encapsulation(封裝資料保護內部)、Inheritance(子類繼承父類)、Polymorphism(同名不同行為)
extends繼承類別(最多一個);implements實作介面(可多個)- Foreground Service / Background Service / Bound Service
- Google 推出的設計系統;首次出現於 Android 5.0 Lollipop (2014),Material You / M3 從 Android 12 開始
11. 最後 3 分鐘衝刺 — Lifecycle 一句話速記
「On Create Start Resume → 用 → Pause Stop → 回來 Restart → 終 Destroy」
Intent:Explicit 指名(自家用),Implicit 報需求(系統找)
OOP:封繼多型;Java 單繼承,可多 implements
4 元件:Activity, Service, Receiver, Provider
儲存 4 招:Internal、Shared、Preferences、Database (Room/SQLite)
dp 量介面、sp 量文字、px 莫亂用
12. 考前 1 分鐘 — 自信檢查清單
- [ ] 我能畫出 Activity Lifecycle 的 7 個方法流程圖
- [ ] 我能寫出 Explicit Intent + putExtra/getStringExtra 的程式
- [ ] 我能解釋 OOP 三大特性
- [ ] 我能列出 4 大 Android app components
- [ ] 我能計算影像檔案大小
- [ ] 我能說出 RGB / CMYK / HSV 各自用途
- [ ] 我能說出 8 大 UI 設計原則
- [ ] 我能分辨 extends 與 implements
- [ ] 我能說出 ART 與 JVM 的差別
- [ ] 我能說出 Service 3 種類型
祝考試順利!加油!💪
教材整理自 CCIT4059 (2025-2026 S2) Unit 1–10 PDF,並參考 Android Developers 官方文件 (https://developer.android.com/guide/components/activities/activity-lifecycle 等)。