50 題模擬考題 + 詳解
涵蓋 Unit 1–10 全部內容。每題含 答案、詳細解答過程、對應單元、易錯提示。 建議:先自己作答,再對照解析。
題型分布
| 題型 | 題數 | 題號 |
|---|---|---|
| Multiple Choice (單選) | 25 | Q1–Q25 |
| True / False (判斷題) | 10 | Q26–Q35 |
| Short Answer (簡答題) | 10 | Q36–Q45 |
| Code / Calculation (程式 / 計算) | 5 | Q46–Q50 |
Part A. 單選題 (Multiple Choice, 25 題)
Q1. Android Stack 由低到高的排列順序是?
A. Applications → Framework → ART → HAL → Linux Kernel
B. Linux Kernel → HAL → Native Libraries & ART → Framework → Applications
C. Linux Kernel → Native Libraries → HAL → Framework → Applications
D. HAL → Linux Kernel → ART → Framework → Applications
答案:B
詳解:Android Stack 是分層架構,由硬件向上: 1. Linux Kernel(最底層,管理 CPU、記憶體、Driver) 2. Hardware Abstraction Layer (HAL)(硬件抽象介面) 3. Native C/C++ Libraries + Android Runtime (ART) 4. Application Framework(Activity Manager、Window Manager…) 5. Applications(系統 App 與第三方 App)
注意:HAL 在 Native Libraries 之下,A 跟 C 都把次序搞錯。 (對應 Unit 4)
Q2. 下列哪個 不是 Android 4 大應用程式元件 (Application Components) ?
A. Activity
B. Service
C. Fragment
D. Content Provider
答案:C
詳解:Android 4 大核心 components 為: - Activity(UI 螢幕) - Service(背景執行) - Broadcast Receiver(接收廣播) - Content Provider(跨 App 資料分享)
Fragment 是 UI 模組,必須寄宿於 Activity,不算獨立 component。常考陷阱題! (對應 Unit 10 / Unit 9)
Q3. 關於 Activity Lifecycle,從首次啟動到用戶開始互動,正確的呼叫順序是?
A. onStart() → onCreate() → onResume()
B. onCreate() → onResume() → onStart()
C. onCreate() → onStart() → onResume()
D. onResume() → onStart() → onCreate()
答案:C
詳解:
- onCreate():建立 Activity,做一次性初始化(setContentView)
- onStart():Activity 可見
- onResume():取得焦點,可與用戶互動(位於 Activity stack 最上層)
口訣:Create → Start → Resume(建立 → 顯示 → 互動) (對應 Unit 4)
Q4. Android Runtime (ART) 與 Java Virtual Machine (JVM) 主要差別是?
A. ART 是 JIT;JVM 是 AOT
B. ART 是 AOT;JVM 是 JIT
C. 兩者都是 JIT
D. 兩者都是 AOT
答案:B
詳解:
- ART 採 Ahead-Of-Time (AOT) 編譯:在 App 安裝時 把 .dex 編譯成 native machine code → 啟動快、記憶體用量少
- JVM 採 Just-In-Time (JIT) 編譯:執行中即時翻譯 bytecode → 啟動慢、跨平台好
口訣:安裝編 = AOT = ART;執行邊跑邊編 = JIT = JVM (對應 Unit 3)
Q5. 下列哪個 Layout 最適合 製作複雜、扁平階層 (flat hierarchy) 的畫面?
A. LinearLayout
B. RelativeLayout
C. ConstraintLayout
D. FrameLayout
答案:C
詳解: - ConstraintLayout 利用約束 (constraints) 互相對齊,能避免深層嵌套;現代 Android 推薦。 - LinearLayout:簡單但常需多層嵌套 - RelativeLayout:相對排版,但 ConstraintLayout 為其升級版 - FrameLayout:只適合單一元素或重疊 (對應 Unit 6)
Q6. 在 XML 中設定 android:id="@+id/myBtn",在 Java 取得此按鈕的正確寫法是?
A. Button b = getId("myBtn");
B. Button b = findViewById(R.id.myBtn);
C. Button b = R.id.myBtn;
D. Button b = new Button(R.id.myBtn);
答案:B
詳解:Android 編譯時自動產生 R class,內含所有資源 ID。透過 findViewById(R.id.xxx) 取得 XML 對應的 View 物件。注意:R.id.myBtn 只是 int 型別的 ID,不是 View 物件本身。
(對應 Unit 4 / 10)
Q7. 下列何者為 Implicit Intent?
A. new Intent(this, WebActivity.class)
B. new Intent(Intent.ACTION_VIEW, Uri.parse("https://hku.hk"))
C. new Intent(MainActivity.this, ServiceA.class)
D. new Intent(getApplicationContext(), LoginActivity.class)
答案:B
詳解: - Explicit Intent 指名目標 class(A、C、D 都是) - Implicit Intent 只指定 action + data,由系統找匹配 App(B 是要求顯示某 URL,系統會打開瀏覽器)
判斷法:有沒有寫 .class → 有 = Explicit,沒有 = Implicit
(對應 Unit 9)
Q8. 計算一張 800×600 像素、24-bit 色深、無壓縮的圖片,未壓縮檔案大小約是?
A. 480 KB
B. 1.37 MB
C. 2.88 MB
D. 4.6 MB
答案:B
詳解:
File size = Width × Height × (Color depth / 8)
= 800 × 600 × (24/8)
= 800 × 600 × 3
= 1,440,000 bytes
轉 MB: 1,440,000 / 1,048,576 ≈ 1.37 MB
(對應 Unit 6)
Q9. RGB(255, 255, 0) 在螢幕上顯示什麼顏色?
A. 白色
B. 黑色
C. 黃色
D. 青色 (Cyan)
答案:C
詳解:RGB 加色模式下: - 紅 + 綠 = 黃 (255, 255, 0) ✔ - 綠 + 藍 = 青 (0, 255, 255) - 紅 + 藍 = 洋紅 (255, 0, 255) - 三色都 0 = 黑;三色都 255 = 白 (對應 Unit 6)
Q10. HSV 色彩模型中,S 代表?
A. Size
B. Saturation
C. Shadow
D. Style
答案:B
詳解: - H = Hue(色相) - S = Saturation(飽和度/純度):100% 純色,0% 灰 - V = Value(亮度/Brightness,所以又叫 HSB) (對應 Unit 5 / 6)
Q11. 下列何者是 Lossy 壓縮格式?
A. PNG
B. RAW
C. JPEG
D. BMP
答案:C
詳解: - Lossless(無損):PNG, RAW, BMP, ZIP, FLAC, WAV - Lossy(有損):JPEG, MPEG, MP3, AAC, HEVC
JPEG 為了縮小檔案而捨棄人眼較難察覺的資料,是典型有損壓縮。 (對應 Unit 6)
Q12. Java 中,下列哪個關鍵字用於繼承類別?
A. implements
B. inherits
C. extends
D. import
答案:C
詳解:
- extends:繼承一個 superclass(Java 只能單一繼承)
- implements:實作 interface(可多個)
- import:引入 package member
- inherits:不是 Java 關鍵字
(對應 Unit 3 / 8)
Q13. 下列關於 Constructor 的敘述何者錯誤?
A. 名稱必須與 class 同名
B. 沒有 return type
C. 創建物件時自動呼叫
D. 必須以 void 宣告
答案:D
詳解:Constructor 完全不寫 return type(不是 void,也不是其他)。它在 new ClassName() 時被呼叫,用於初始化物件。可 overload(多個不同參數版本)。
(對應 Unit 3)
Q14. 在 Activity 中,當你按下 HOME 鍵離開 App,會依序呼叫哪些 callback?
A. onPause() → onDestroy()
B. onPause() → onStop()
C. onStop() → onPause()
D. onPause() → onResume()
答案:B
詳解:按 HOME 鍵不會結束 Activity,只是讓它不可見:
- 先 onPause()(失焦)
- 再 onStop()(不可見)
但還沒 onDestroy(),除非系統需要回收記憶體。
之後回到 App 時呼叫 onRestart() → onStart() → onResume()。
(對應 Unit 4)
Q15. 下列何者不是 Android App 4 種主要 Storage 之一?
A. Internal Storage
B. Shared Storage
C. Cloud Storage
D. Shared Preferences
答案:C
詳解:Android 平台 4 種儲存方式: 1. Internal Storage 2. Shared (External) Storage 3. Preferences(用 Jetpack Preferences) 4. Databases(用 Room)
Cloud storage 雖然可用,但不屬於 Android 內建 儲存類型。 (對應 Unit 10)
Q16. Material Design 首次 出現於哪個 Android 版本?
A. Android 4.0 Ice Cream Sandwich
B. Android 5.0 Lollipop
C. Android 8.0 Oreo
D. Android 12
答案:B
詳解: - Material Design 1:2014 隨 Android 5.0 Lollipop 推出 - Material 2 (Theming):可客製化 - Material 3 / Material You:Android 12+,動態色彩 (對應 Unit 7)
Q17. 下列何者最適合儲存用戶設定(如音量、開關狀態等小型 key-value 資料)?
A. SQLite Database
B. Shared Preferences
C. Room Database
D. Content Provider
答案:B
詳解: - Shared Preferences 適合小量、key-value 形式(如 username、開關)→ 存成 XML - SQLite / Room 適合結構化、大量資料(行列) - Content Provider 是分享資料的介面,不是儲存方式本身 (對應 Unit 10)
Q18. 下列關於 Service 的敘述,錯誤 的是?
A. Service 沒有 UI
B. Foreground Service 必須顯示 notification
C. Bound Service 可與其他 component 進行 IPC
D. Service 必定執行在主線程的 UI thread
答案:D
詳解: - A、B、C 都對 - Service 預設在 main thread,但長時間工作必須建 worker thread,否則會 ANR。 - 「必定執行在 UI thread」是錯的,Service 可運用 worker thread 處理耗時任務。 (對應 Unit 9 / 10)
Q19. 下列何者為 dangerous permission?
A. INTERNET
B. SET_WALLPAPER
C. READ_CONTACTS
D. VIBRATE
答案:C
詳解: - Normal(自動授權):INTERNET, VIBRATE, SET_WALLPAPER - Dangerous(需執行時請求用戶批准):READ_CONTACTS, CAMERA, LOCATION, SEND_SMS, RECORD_AUDIO, READ_EXTERNAL_STORAGE 等
判斷法:會影響隱私的就是 dangerous。 (對應 Unit 10)
Q20. Visual Hierarchy 中的 3 個層級,依重要性由高到低排序為?
A. Subordinate → Dominant → Subdominant
B. Dominant → Subdominant → Subordinate
C. Subdominant → Dominant → Subordinate
D. Dominant → Subordinate → Subdominant
答案:B
詳解: - Dominant(主導)— 最重要、最大、最吸睛(Heading) - Subdominant(次主導)— 次要強調(Subheading) - Subordinate(從屬)— 最不重要(Body)
通常透過字型大小、顏色、位置展現層級。 (對應 Unit 5)
Q21. 下列何者不是 OOP 三大特性之一?
A. Encapsulation
B. Inheritance
C. Concurrency
D. Polymorphism
答案:C
詳解:OOP 三大特性: - Encapsulation 封裝 - Inheritance 繼承 - Polymorphism 多型
Concurrency(並行)是 thread 相關概念,不算 OOP 特性。 (對應 Unit 8)
Q22. 下列關於 Overloading 與 Overriding 的敘述,何者正確?
A. Overloading 發生在父子類;Overriding 發生在同 class
B. Overloading 發生在同 class;Overriding 發生在父子類
C. 兩者都發生在同 class
D. 兩者都發生在父子類
答案:B
詳解: - Overloading(多載):同 class 內 多個同名 method/constructor,靠參數個數或型別區分 - Overriding(覆寫):子類 重新定義父類的 method(同名、同回傳、同參數)
範例:
// Overloading(同 class)
void setX(int a);
void setX(float a);
// Overriding(父子類)
class B extends A { @Override void doIt() { ... } }
(對應 Unit 3 / 8)
Q23. 一個 EditText 元件的 EditText 類別繼承自?
A. View
B. ViewGroup
C. TextView
D. ImageView
答案:C
詳解:EditText 是 TextView 的子類,用於可編輯的文字輸入。所以 EditText 擁有 TextView 所有屬性(如 textSize、textColor)外加可輸入特性。
(對應 Unit 7)
Q24. 在 Android 中,dp 與 sp 的主要差別是?
A. dp 用於文字、sp 用於圖形
B. dp 與裝置密度無關;sp 額外會跟隨用戶字級設定
C. dp 是 pixel;sp 是 millimeter
D. 兩者沒有差別
答案:B
詳解: - dp(density-independent pixel):UI 尺寸單位,不同密度螢幕看起來大小一致 - sp(scale-independent pixel):與 dp 同大小,但會根據用戶系統字級調整,文字專用 (對應 Unit 6)
Q25. 下列關於 Fragment 的敘述,錯誤 的是?
A. Fragment 可獨立存在於 App 而無需 Activity
B. Fragment 有自己的 lifecycle
C. 一個 Activity 可包含多個 Fragment
D. Fragment 可重用於多個 Activity
答案:A
詳解:Fragment 不能獨立存在,必須寄宿於 Activity 或另一 Fragment。其 lifecycle 依附 Activity,但有自己的 callback(onAttach、onCreateView 等)。
(對應 Unit 9)
Part B. 判斷題 (True / False, 10 題)
Q26. (T/F) Native App 通常比 Web App 有更好的硬件存取能力,例如鏡頭、GPS。
答案:True
詳解:Native App 透過 SDK 直接呼叫硬件 API(Camera, GPS, Accelerometer 等),存取效能與權限都比 Web App 強。Web App 受瀏覽器限制,存取硬件不完整。 (對應 Unit 1)
Q27. (T/F) 在 Java 中,每個 class 可以繼承多個 superclass。
答案:False
詳解:Java 只允許單一繼承(每個 class 最多 1 個直接父類),但可實作多個 interface。這正是 interface 的設計目的,解決多重繼承衝突。 (對應 Unit 8)
Q28. (T/F) onPause() 必須快速完成,因為下一個 Activity 在它 return 之前不會 resume。
答案:True
詳解:Activity A → B 時,A 的 onPause() 完成前,B 不會進入 onResume()。所以 onPause 切勿做耗時工作,否則畫面會卡頓。
(對應 Unit 4)
Q29. (T/F) Lossless 壓縮的檔案大小通常比 Lossy 壓縮小。
答案:False
詳解:恰好相反。Lossy 因為丟掉部分資料,檔案更小(如 JPEG);Lossless 完整保留,檔案較大(如 PNG)。但 lossless 沒有畫質損失,lossy 會降質。 (對應 Unit 6)
Q30. (T/F) BroadcastReceiver 必須在 AndroidManifest.xml 中宣告或在程式碼中動態註冊才會收到廣播。
答案:True
詳解:兩種註冊方式:
1. 靜態:在 manifest 用 <receiver> 宣告
2. 動態:程式中用 registerReceiver() 註冊
不註冊就收不到廣播。 (對應 Unit 10)
Q31. (T/F) 在 Android 6.0 (API 23) 之後,所有 dangerous permissions 都在安裝時自動授權。
答案:False
詳解:Android 6.0 (API 23) 改為執行時請求 dangerous permission,用戶可逐項允許或拒絕。API 22 及之前才是安裝時一次同意。 (對應 Unit 10)
Q32. (T/F) Geometric Shape(如圓形、方形、三角形)有明確的幾何規則,可用數字精準量度。
答案:True
詳解: - Geometric Shape:嚴格規則(圓、方、三角等),可量化 - Organic Shape:自然不規則(雲、葉、河流),難以量化 (對應 Unit 5)
Q33. (T/F) String 物件在 Java 中是 mutable(可變的)。
答案:False
詳解:Java 的 String 是 immutable(不可變)。所有「修改」操作如 +、replace 都會回傳新 String 物件。可變的字串請用 StringBuilder 或 StringBuffer。
(對應 Unit 3)
Q34. (T/F) ConstraintLayout 比 RelativeLayout 更現代,且支援扁平 (flat) 階層,效能更好。
答案:True
詳解:ConstraintLayout 是 Google 推出取代 RelativeLayout 的方案,可在單層內完成複雜版面,減少嵌套層級,提升 measure / layout 效能。 (對應 Unit 6)
Q35. (T/F) 在 onCreate() 內覆寫時,應先處理自己的邏輯,最後再呼叫 super.onCreate()。
答案:False
詳解:反過來!覆寫 lifecycle 方法時 必先呼叫 super,讓父類完成必要的初始化(如儲存 instance state),再執行自己的程式:
@Override
protected void onCreate(Bundle s) {
super.onCreate(s); // 必先呼叫
setContentView(R.layout.x); // 再寫自己的
}
(對應 Unit 4)
Part C. 簡答題 (Short Answer, 10 題)
Q36. 列出並簡述 Android 4 大應用元件 (App Components)。
答案:
| 元件 | 功能 |
|---|---|
| Activity | 一個 UI 螢幕,提供使用者互動介面 |
| Service | 背景執行長時間操作,無 UI |
| Broadcast Receiver | 接收系統或 App 之間的廣播訊息 (Intent) |
| Content Provider | 管理 App 資料,並可分享給其他 App,透過 URI 存取 |
每個元件必須在 AndroidManifest.xml 宣告才會被系統認可。
(對應 Unit 10)
Q37. 解釋 Explicit Intent 與 Implicit Intent 的差別,並各舉一程式碼例子。
答案:
Explicit Intent:明確指定目標 Component class(用於自家 App 內元件切換):
Intent i = new Intent(this, WebActivity.class);
i.putExtra("KEY_URL", "https://hku.hk");
startActivity(i);
Implicit Intent:只指定 action 與 data,由系統找匹配的 App:
Intent i = new Intent(Intent.ACTION_VIEW,
Uri.parse("https://hku.hk"));
startActivity(i); // 系統會打開瀏覽器
判斷法:有寫 .class 就是 Explicit;用 action + URI 就是 Implicit。
(對應 Unit 9)
Q38. 解釋 OOP 三大特性,並各舉一 Java 例子。
答案:
-
Encapsulation 封裝:保護內部資料,只開放介面
java public class Account { private double balance; // 隱藏 public double getBalance() { // 公開介面 return balance; } } -
Inheritance 繼承:子類繼承父類功能
java public class MainActivity extends AppCompatActivity { } // 子類 extends 父類 -
Polymorphism 多型:同名不同行為
java // Overloading void setFe(int a); void setFe(String s); // Subtype polymorphism Food f = new Apple(); // Apple 是 Food 子類(對應 Unit 8)
Q39. 解釋 Java 的 this 與 super 兩個關鍵字的用途。
答案:
| 關鍵字 | 用途 |
|---|---|
this |
1) 指向「自己這個物件」(self-reference) 2) 在 constructor 內呼叫同類別其他 constructor |
super |
1) 指向父類(superclass) 2) 呼叫父類的 method(如 super.onCreate())3) 呼叫父類的 constructor(如 super(args)) |
範例:
@Override
protected void onCreate(Bundle s) {
super.onCreate(s); // 呼叫父類 onCreate
this.setContentView(R.layout.main); // this 可省略
}
(對應 Unit 8)
Q40. 列出並簡述 8 大 User Interface Design 通用原則。
答案:
- Strive for consistency(保持一致性)— Internal + External
- Enable shortcuts for frequent users(提供捷徑)
- Offer informative feedback(提供有用回饋)
- Make users feel they are in control(讓用戶有掌控感)
- Design dialogs to yield closure(對話有起承轉合)
- Strive to prevent errors and help recover(預防 + 補救錯誤)
- Allow easy undo and home(可復原、可回首頁)
- Reduce short-term memory load(減低短期記憶負擔)
(對應 Unit 7)
Q41. Activity Lifecycle 中,從一個 Activity A 切換到 Activity B 的回呼方法順序為何?
答案:
1) Activity A: onPause()
↓
2) Activity B: onCreate()
↓
3) Activity B: onStart()
↓
4) Activity B: onResume() ← B 取得焦點,用戶可互動
↓
5) Activity A: onStop() ← 若 A 完全不可見
關鍵點:A 的 onPause() 必須先 return,B 才能 onResume,所以 onPause 必須輕量。
(對應 Unit 4)
Q42. 解釋 extends 與 implements 的差別,並舉一個同時使用兩者的範例。
答案:
| 關鍵字 | 用途 | 限制 |
|---|---|---|
extends |
繼承 class(重用功能) | 最多 1 個 superclass |
implements |
實作 interface(提供 contract) | 可多個 interface |
範例(事件處理):
public class MainActivity extends AppCompatActivity
implements View.OnClickListener,
SensorEventListener {
@Override
public void onClick(View v) { /* 處理點擊 */ }
@Override
public void onSensorChanged(SensorEvent e) { /* 處理 sensor */ }
@Override
public void onAccuracyChanged(Sensor s, int a) { /* ... */ }
}
(對應 Unit 8)
Q43. 列出並比較 Android 4 種主要的 Data Storage 類型。
答案:
| 類型 | 用途 | 範例 / API |
|---|---|---|
| Internal Storage | App 私有檔案,僅本 App 可存取 | getFilesDir(), getCacheDir() |
| Shared (External) Storage | 跨 App 分享,如照片、影片、文件 | MediaStore API、Storage Access Framework |
| Preferences | 小量 key-value 設定資料 | Jetpack Preferences (XML 檔) |
| Databases | 結構化大量資料(行列) | Room(基於 SQLite) |
選擇依據: - 私密資料 → Internal - 想分享 → Shared - 設定值 → Preferences - 大量結構化資料 → Database (對應 Unit 10)
Q44. 解釋 Event Source、Event Listener、Event Handler 三者的關係。
答案:
Event Source Event Listener Event Handler
(e.g. Button) ── 註冊 ──> (Listener obj) ───> onClick()
│ ▲
└───────── 使用者點擊時 notify ─────────────────┘
- Event Source:產生事件的元件(如 Button)
- Event Listener:實作某 Listener interface 的物件,被「註冊」到 source
- Event Handler:Listener 內被呼叫的方法(如
onClick(View v))
範例:
Button btn = findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() { // 註冊 Listener
@Override
public void onClick(View v) { // Handler
Log.d("TAG", "clicked");
}
});
(對應 Unit 8)
Q45. 比較 ART (Android Runtime) 與 JVM (Java Virtual Machine) 的差別。
答案:
| 項目 | ART | JVM |
|---|---|---|
| 編譯時機 | AOT (Ahead-Of-Time):安裝時編譯 | JIT (Just-In-Time):執行時編譯 |
| 執行 bytecode | .dex (Dalvik Executable) |
.class |
| 啟動速度 | 快 | 慢 |
| 記憶體用量 | 低 | 高 |
| 目標平台 | Android 行動裝置 | 桌面、伺服器、跨平台 |
| 優化 | 為手機硬體優化 | 通用 |
App 編譯流程(Android):
.java → .class(javac)→ .dex(d8/dx)→ 打包 APK → ART 在安裝時 AOT 編譯成 native code
(對應 Unit 3)
Part D. 程式 / 計算題 (Code & Calculation, 5 題)
Q46. 計算一張 1024 × 768 像素、24-bit 色深的圖片,在 壓縮比 (CR) = 8 下的壓縮後檔案大小(MB,保留 2 位小數)。
答案:約 0.28 MB
詳解:
Step 1:算未壓縮 bits 數
Bits = Width × Height × Color depth
= 1024 × 768 × 24
= 18,874,368 bits
Step 2:壓縮後 bits 數
壓縮 bits = 18,874,368 / 8 (CR)
= 2,359,296 bits
Step 3:轉成 bytes
Bytes = 2,359,296 / 8
= 294,912 bytes
Step 4:轉成 MB
MB = 294,912 / 1,048,576
≈ 0.28 MB
簡化公式:
File Size = (W × H × Color depth) / (8 × CR)
= (1024 × 768 × 24) / (8 × 8)
= 294,912 bytes ≈ 0.28 MB
(對應 Unit 6)
Q47. 寫一段完整 Java Activity 程式,要求:
- 名稱為
MainActivity,繼承AppCompatActivity - 在
onCreate()中載入名為activity_main的 XML layout - 取得 id 為
btnHello的 Button - 點擊按鈕時,顯示 Toast「Hello MAD!」
答案:
package com.example.mad;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // 必先呼叫 super
setContentView(R.layout.activity_main); // 載入 XML
Button btn = findViewById(R.id.btnHello); // 取得按鈕
btn.setOnClickListener(new View.OnClickListener() { // 註冊 Listener
@Override
public void onClick(View v) { // Event Handler
Toast.makeText(MainActivity.this,
"Hello MAD!",
Toast.LENGTH_SHORT).show();
}
});
}
}
Lambda 簡化版:
btn.setOnClickListener(v ->
Toast.makeText(this, "Hello MAD!", Toast.LENGTH_SHORT).show()
);
評分點:
1. 正確 package + import
2. extends AppCompatActivity
3. super.onCreate() 在前
4. setContentView 正確
5. findViewById + R.id
6. 正確設定 click listener
7. Toast 語法正確
(對應 Unit 4 / 8)
Q48. 設計兩個 Activity:MainActivity 與 SecondActivity。在 MainActivity 按下按鈕後,啟動 SecondActivity 並傳遞字串 "username" 為 "Alice"。SecondActivity 需取得這個字串並顯示在 TextView 上。
答案:
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle s) {
super.onCreate(s);
setContentView(R.layout.activity_main);
Button btn = findViewById(R.id.btnGo);
btn.setOnClickListener(v -> {
Intent i = new Intent(MainActivity.this, SecondActivity.class);
i.putExtra("username", "Alice"); // 用 key="username" 傳資料
startActivity(i);
});
}
}
SecondActivity.java
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle s) {
super.onCreate(s);
setContentView(R.layout.activity_second);
// 用同樣的 key 取回資料
String name = getIntent().getStringExtra("username");
TextView tv = findViewById(R.id.tvName);
tv.setText("Welcome, " + name);
}
}
AndroidManifest.xml(必須宣告兩個 Activity)
<application ...>
<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>
<activity android:name=".SecondActivity" />
</application>
評分點:
1. 用 Explicit Intent(指定 SecondActivity.class)
2. putExtra("username", "Alice") 傳資料
3. getStringExtra("username") 用相同 key 取回
4. 在 Manifest 宣告 SecondActivity(很容易忘)
(對應 Unit 9)
Q49. 寫一個 Java class Bicycle,要求:
- 兩個 field:
name(String) 與speed(private int) - 一個 constructor 接收 name 作為參數,並把 speed 設為 0
- 一個 method
setSpeed(int)設定速度(不可小於 0) - 一個 method
getSpeed()回傳速度 - 一個 method
toString()回傳"Bike[name] speed=xx"格式
答案:
public class Bicycle {
String name; // 預設 package-private
private int speed; // 封裝:外界不能直接改
// Constructor
public Bicycle(String inName) {
this.name = inName;
this.speed = 0; // 初始速度 0
}
// Setter(含驗證)
public void setSpeed(int newSpeed) {
if (newSpeed < 0) {
this.speed = 0; // 防止負值
} else {
this.speed = newSpeed;
}
}
// Getter
public int getSpeed() {
return this.speed;
}
// toString override
@Override
public String toString() {
return "Bike[" + name + "] speed=" + speed;
}
}
使用範例:
Bicycle b = new Bicycle("MyBike");
b.setSpeed(25);
System.out.println(b); // 輸出:Bike[MyBike] speed=25
System.out.println(b.getSpeed()); // 25
評分點:
1. speed 用 private(封裝)
2. Constructor 名稱與 class 相同、無 return type
3. setSpeed 有負值檢查
4. getSpeed 回傳正確
5. @Override toString() 正確覆寫
(對應 Unit 3 / 8)
Q50. 假設一個 Image 是 RGB 24-bit、解析度 500 × 400,問:
- (a) 顏色數量為多少?
- (b) 未壓縮檔案大小是多少 KB?
- (c) 若使用 alpha channel 8-bit(變 ARGB 32-bit),檔案大小變多少 KB?
答案:
(a) 顏色數量
24-bit 表示有 24 個 bit 可用:
2^24 = 16,777,216 ≈ 16.7 million colors
即「約 1670 萬色」(也稱 True Color)。
(b) 未壓縮 24-bit 檔案大小
File size = W × H × (bits / 8)
= 500 × 400 × (24 / 8)
= 500 × 400 × 3
= 600,000 bytes
轉 KB: 600,000 / 1024
≈ 585.94 KB(約 586 KB)
或粗算用 1000 bytes = 1 KB:
600,000 / 1000 = 600 KB
(c) ARGB 32-bit 檔案大小
File size = 500 × 400 × (32 / 8)
= 500 × 400 × 4
= 800,000 bytes
轉 KB: 800,000 / 1024
≈ 781.25 KB(約 781 KB)
比較: - 24-bit:586 KB - 32-bit(含 alpha):781 KB - 多出來的 8-bit 就是 transparency 資訊
口訣: - 每個 pixel 8-bit = 1 byte - 24-bit = 3 bytes/pixel - 32-bit = 4 bytes/pixel (對應 Unit 6)
附錄:常見錯誤與陷阱整理
1. Activity Lifecycle 陷阱
- ❌ 覆寫時忘記呼叫
super.onXxx() - ❌ 把
onCreate()和onStart()順序搞反 - ❌ 以為按 HOME 鍵會立即
onDestroy()(實際只到 onStop)
2. Intent 陷阱
- ❌ 忘記在 Manifest 宣告新 Activity →
ActivityNotFoundException - ❌ Explicit / Implicit 名稱搞錯:「有指定 class = Explicit」
- ❌
putExtra的 key 與getStringExtra的 key 不一致
3. Java 陷阱
- ❌ 把 Constructor 加上 return type(如
public void Bicycle())→ 變成方法 - ❌ String 用
==比較(要用.equals()) - ❌ Java 不允許多重類別繼承(但可多重 interface)
4. 計算題陷阱
- ❌ 忘記除以 8(bits → bytes)
- ❌ KB 與 MB 換算用 1000 還是 1024(標準是 1024)
- ❌ 忘記乘上 color depth
5. UI / Design 陷阱
- ❌ 把 RGB(加色)與 CMYK(減色)功能混淆
- ❌ dp 與 sp 用錯(文字一定用 sp)
- ❌ Material Design 起源版本記成 Android 4(是 Android 5.0 Lollipop)
自評表
完成 50 題後,依正確率自我評估:
| 正確題數 | 評級 | 建議 |
|---|---|---|
| 45–50 | 優秀 ⭐⭐⭐ | 重點複習錯題即可上場 |
| 40–44 | 良好 ⭐⭐ | 重看錯題章節,補強概念 |
| 35–39 | 尚可 ⭐ | 必看 Unit 3、4、8、9 |
| < 35 | 加油 | 先看 MAD_Exam_Review_2hr.md 重點複習 |
祝你考試大成功!🚀
本模擬考題參考 CCIT4059 (2025-2026 S2) Unit 1–10 教材, 並對照 Android Developers 官方文件編寫。