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 層,由下到上 — 考試常考)

  1. Linux Kernel — 硬件驅動、記憶體、CPU 管理
  2. Hardware Abstraction Layer (HAL) — 將硬件抽象成統一介面
  3. Native C/C++ Libraries + Android Runtime (ART) — 執行 .dex
  4. Application Framework — Activity Manager / Window Manager / Notification 等
  5. 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 階段

  1. Initiation / Requirement / Planning — 收集 functional 與 non-functional requirements
  2. Design — UI/UX wireframe、架構設計(MVC/MVP)
  3. Implementation — 寫程式 + 單元測試
  4. Evaluation & Distribution — 測試後上架 (Google Play / App Store)
  5. 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 核心組件

  1. SDK Platforms — 每個 Android 版本對應的 API
  2. SDK Platform-toolsadb, fastboot 等裝置工具
  3. Gradle + Android Gradle Plugin (AGP) — 自動化 build
  4. SDK Build-Tools — 編譯成 APK / AAB
  5. 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 技巧

  1. Overlapping(遮蓋)— 近物擋住遠物
  2. Linear Perspective(線性透視)— 越遠越小
  3. Atmospheric Perspective(大氣透視)— 越遠飽和度/對比度越低

4.3 HSV Colour Model(重要)

  • H = Hue 色相(紅、橙、黃...)
  • S = Saturation 飽和度(純度,0% 灰 → 100% 純)
  • V = Value 亮度(暗 ↔ 亮)

4.4 Visual Design 4 大原則

  1. Unity 統一 - Intra-page:同一頁內元素一致 - Inter-page:跨頁面一致(如 HOME 按鈕永在左上角)

  2. Focus / Emphasis 強調 - 用對比 (contrast) 或孤立 (isolation) 突出重點 - 可變化:位置、大小、形狀、顏色、亮度、動態

  3. Visual Hierarchy 視覺階層(3 層必背) - Dominant(主導)— 最大、最吸睛、Heading - Subdominant(次主導)— Subheading - Subordinate(從屬)— Body content

  4. 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 三大特性

  1. Resolution 解析度 — Width × Height(像素數)
  2. Colour Depth 色深 — 每像素的 bit 數 - 1 bit → 2 色;8 bit → 256 色;24 bit → 約 1670 萬色
  3. 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 八大通用原則(必背

  1. Strive for consistency 保持一致性(Internal + External)
  2. Enable frequent users to use shortcuts 提供捷徑
  3. Offer informative feedback 提供有用回饋
  4. Make users feel in control 讓用戶感到掌控
  5. Design dialog to yield closure 對話有起承轉合
  6. Strive to prevent errors 預防錯誤,並協助恢復
  7. Allow undo and home 可復原、可回首頁
  8. Reduce short-term memory load 減低短期記憶負擔

6.2 4 大 Mobile App 特殊 UI 議題

  1. Provide essential content only — 每屏只一個主任務
  2. Linearize content — 垂直為主
  3. Optimize hardware performance — 善用 sensor / camera / GPS
  4. Optimize interaction sequences — 減少打字、減少頁面、減少步驟

6.3 Input Controls(常考組件)

元件 用途
EditText 文字輸入(TextView 子類)
SeekBar 拖曳調整
CheckBox 多選
RadioGroup + RadioButton 單選
Switch 開關
Spinner 下拉選單

6.4 Human Memory 3 層

  1. Sensory memory 感覺記憶(< 0.5 秒;iconic / echoic / haptic)
  2. Short-term memory 短期記憶(幾秒至幾分鐘;只能記 4-5 項
  3. 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 父子關係)
  • this vs super
  • implements vs extends
  • Event Handling 流程:Source → 註冊 Listener → 觸發 → 呼叫 Handler

§8. Intent, Service, Fragment (U9) — 15 分鐘

8.1 4 大 Android App 元件 ⭐⭐

  1. Activity — UI 螢幕
  2. Service — 背景執行(無 UI)
  3. Broadcast Receiver — 接收廣播訊息
  4. 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 ServicestartService() → 持續運行 → stopService() / stopSelf()
  • Bound ServicebindService() → 與綁定者共存

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 — 管理 Fragment
  • FragmentTransaction — 加/移/換 Fragment

8.15 Fragment 3 種類型

  1. Single Fragment — 單畫面
  2. List Fragment — 顯示清單
  3. 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 BroadcastACTION_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 子目錄
  • 編譯時自動產生 R class,作為資源 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 用 Threadimplements 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 速答模擬題(自我檢測)

把答案寫下來,再與正解對照。

  1. List the 5 layers of the Android Stack (bottom to top).
  2. List Android Activity lifecycle's 7 callback methods in order from launch to destroy.
  3. What's the difference between AOT (ART) and JIT (JVM)?
  4. Calculate file size of a 800×600, 24-bit colour image (uncompressed).
  5. Give one example each: Explicit and Implicit Intent in Java code.
  6. What are the 4 essential Android app components?
  7. List 3 OOP features and define each in one sentence.
  8. What's the difference between extends and implements?
  9. List the 3 types of Service in Android.
  10. What is Material Design? Which Android version introduced it?

參考答案

  1. Linux Kernel → HAL → Native C/C++ Libraries & ART → Application Framework → Applications
  2. onCreate → onStart → onResume → onPause → onStop → (onRestart) → onDestroy
  3. ART 在 App 安裝時做 AOT 編譯,啟動快、用量少;JVM 在執行時做 JIT 編譯,啟動慢但跨平台
  4. 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")));
  5. Activity, Service, Broadcast Receiver, Content Provider
  6. Encapsulation(封裝資料保護內部)、Inheritance(子類繼承父類)、Polymorphism(同名不同行為)
  7. extends 繼承類別(最多一個);implements 實作介面(可多個)
  8. Foreground Service / Background Service / Bound Service
  9. 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 等)。