iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0

各位戰士,歡迎來到第一週偵查任務的最後一天。我們已經成功地監控了 CPU 的運算、記憶體的佔用和網路的傳輸。今天,我們將完成最後一項情蒐任務:電量 (Energy)。這是一場無聲的消耗戰,使用者雖然看不見,卻能透過手機右上角的電池百分比,清楚地感受到戰況的慘烈。

我們的目標是確保 App 在提供服務的同時,不會成為一個讓使用者產生「電量焦慮」的負擔。為此,我們需要了解並使用 Energy Profiler


我們的能源監測站:Energy Profiler

Energy Profiler 透過分析系統事件,估算你 App 的電量消耗情況。它不像其他 Profiler 那樣提供精確到毫秒或位元組的數據,而是更宏觀地向你展示哪些行為模式可能導致了高額的電量消耗。

打開 Profiler,你會在 CPU 時間線上方看到一條 Energy 時間線,它以「輕度」、「中度」、「重度」來標示 App 的預估電量使用強度。


耗電的頭號公敵:系統事件

Energy Profiler 的精髓在於下方的系統事件時間線 (System Event Timeline)。它會標示出三種最主要的耗電行為,我們必須學會識別它們:

  1. Wakelocks (喚醒鎖)

    • 是什麼:這是一種向系統申請「特權」的機制,用來防止設備進入深度睡眠模式。當你的 App 需要在螢幕關閉後繼續執行 CPU 運算時(例如播放音樂、記錄 GPS 軌跡),就需要用到它。
    • 危險性這是最常見的電量殺手! 如果你申請了 Wakelock 卻忘記在任務完成後釋放它 (wakelock.release()),設備將永遠無法進入休眠狀態,電量會被迅速耗盡。
  2. Alarms (鬧鐘)

    • 是什麼:這是一種使用 AlarmManager 在未來的特定時間點喚醒設備來執行任務的機制,即使你的 App 當時並未運行。
    • 危險性:不精確或過於頻繁的鬧鐘(例如每分鐘輪詢一次伺服器)會反覆將設備從深度睡眠中喚醒,造成大量電量消耗。這種行為在現代 Android 版本中已受到嚴格限制。
  3. Jobs (任務)

    • 是什麼:這是透過 JobScheduler 或更現代的 WorkManager 來調度後台任務的機制。
    • 優點:這是 Google 官方推薦的、對電量最友好的後台任務解決方案。它會讓系統在最合適的時機(例如設備正在充電、連上 Wi-Fi 時)批量執行任務。
    • 注意:雖然它本身是優化的,但如果你調度的任務本身非常耗時耗資源,依然會造成電量消耗。

實戰演練:揪出一個濫用鬧鐘的行為

假設我們的 App 為了即時更新天氣,使用了一個非常古老且糟糕的設計:每分鐘設定一個精確鬧鐘 (AlarmManager.setExact) 來喚醒設備並請求一次天氣 API。

作戰場景模擬:

  1. 運行你的 App,並讓它在背景運行。
  2. 打開 Energy Profiler,觀察系統事件時間線

分析情報:

你會在時間線上看到一排密度極高Alarm 事件標記。如果你放大時間軸,會發現它們幾乎是每分鐘出現一次。每一個 Alarm 事件之後,可能還會緊跟著一個短暫的 Wakelock 事件(因為 App 被喚醒後需要 CPU 執行網路請求)。

![Energy Profiler 中密集的 Alarm 事件示意圖]

這張圖就是鐵證!它告訴你,你的 App 正在像一個不守紀律的士兵,每分鐘都在把睡夢中的將軍(系統)叫醒一次,只是為了一件無關緊要的小事。這種行為對整個軍營(手機電池)的消耗是毀滅性的。

解決方案:立即停用 AlarmManager,改用 WorkManager 來實現週期性的後台同步。你可以設定一個 PeriodicWorkRequest,並為它加上 NetworkType.CONNECTED 等約束,讓系統在最適當的時機以最高效的方式完成任務。


第一週偵查任務總結

恭喜你,戰士!你已經成功完成了為期一週的偵查與情蒐任務。

在這七天裡,我們學會了如何使用 Android Studio Profiler 的全套武器:

  • CPU Profiler 的火焰圖揪出運算瓶頸。
  • Memory Profiler 的記憶體快照和 LeakCanary 捕捉記憶體洩漏。
  • Network Profiler 監控網路傳輸,找出浪費的請求。
  • Energy Profiler 識別導致電量消耗的元兇。

我們的偵查階段已經結束,我們對敵人的作戰方式有了清晰的了解。從明天開始,我們將進入第二階段:閃電戰。我們的第一個目標,將是使用者最有感、也最能體現優化成果的戰役——應用啟動速度優化戰役

養精蓄銳,我們下週一開戰!


上一篇
# Day 6:【Network Profiler】網路請求全監控
下一篇
# Day 8:【啟動戰役】定義與測量:冷啟動、熱啟動與溫啟動
系列文
Android 性能戰爭:從 Profiler 開始的 30 天優化實錄8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言