Battery-Aware Scheduling
Optimalkan pekerjaan background berdasarkan status baterai
Tujuan Pembelajaran
- Memahami dampak background task terhadap baterai
- Mampu mendeteksi status baterai dan charging state
- Mengerti cara mendesain task yang menghormati baterai user
Analogi
Battery = Tangki Bensin:
- Aplikasi nganggur = mobil diam, hemat bensin
- Background sync = mobil idle, tetap boros bensin
- GPS tracking = mobil ngebut di tol, habiskan bensin
Developer yang baik: tau kapan harus 'jalan' dan kapan harus 'parkir'.
Baterai seperti tangki bensin — setiap background task menghabiskannya. Developer yang baik tahu kapan harus jalan dan kapan harus parkir.
Penjelasan Konsep
Battery adalah resource paling berharga di mobile. User sering uninstall aplikasi yang boros baterai. Background task harus didesain dengan battery-awareness.
Battery API: (1) expo-battery — getBatteryLevelAsync() (0-1), getBatteryStateAsync() (charging, unplugged, full). (2) isLowPowerModeEnabledAsync() — iOS Low Power Mode, Android Battery Saver.
Strategi battery-aware: (1) Charging state = full power → jalanin semua task berat: image processing, large file upload, database vacuum. (2) Full battery (>80%) → task normal. (3) Medium battery (40-80%) → kurangi frekuensi dan ukuran sync. (4) Low battery (20-40%) → hanya critical sync. (5) Very low (<20%) + Low Power Mode → defer ALL non-critical work.
Task deferral: jangan drop task, tapi tunda. Simpan queue di storage, execute saat kondisi lebih baik (charging). Gunakan flag: deferredUntilCharge.
Monitoring: Track battery consumption app-mu. Gunakan Xcode Energy Log (iOS) dan Android Battery Historian. Target: app tidak muncul di Battery Usage top 10.
User communication: kalau app perlu download data besar (misal: update offline maps), beri tahu user: “Download 200MB. Disarankan saat charging dan WiFi.” Minta konfirmasi, jangan auto-download.
Inti yang Perlu Dipahami
Bagian ini berfokus pada memahami dampak background task terhadap baterai., mampu mendeteksi status baterai dan charging state., dan mengerti cara mendesain task yang menghormati baterai user. Jangan terburu-buru menghafal istilahnya. Lebih penting untuk memahami peran setiap konsep dan kapan konsep itu muncul dalam pekerjaan web development.
Saat membaca Battery-Aware Scheduling, gunakan tujuan belajar sebagai penanda arah. Kalau kamu sudah bisa menjelaskan tujuan itu dengan kata-katamu sendiri, berarti fondasinya mulai terbentuk.
Cara Membayangkannya
Baterai seperti tangki bensin — setiap background task menghabiskannya. Developer yang baik tahu kapan harus jalan dan kapan harus parkir. Analogi ini dipakai supaya konsep teknis tidak terasa melayang. Hubungkan setiap istilah dengan perannya: siapa yang meminta, siapa yang memproses, data apa yang berpindah, dan hasil apa yang diharapkan.
Kalau analoginya sudah terasa masuk akal, barulah lihat istilah teknisnya. Cara ini membuat materi lebih mudah dipahami daripada langsung menghafal definisi.
Saat Melihat Contoh Kode
Contoh kode pada chapter ini memakai bahasa tsx. Bacalah contoh kode sebagai ilustrasi alur, bukan sebagai bagian yang harus langsung dihafal. Battery.getBatteryLevelAsync return 0-1. BatteryState.CHARGING = device dicolok. isLowPowerModeEnabled untuk cek mode hemat baterai. Jangan jalanin task berat kalau level < 0.5 dan tidak charging.
Perhatikan nama fungsi, urutan langkah, dan data yang berpindah. Biasanya tiga hal itu sudah cukup untuk memahami hubungan antara teori dan praktik.
Konteks dalam Perjalanan Belajar
Setiap konsep di platform ini dipilih karena dipakai di industri. Fokus pada pemahaman, bukan hafalan.
Kamu sudah di bagian lanjutan. Mulai pikirkan bagaimana konsep ini dipakai di dunia kerja — bukan hanya untuk belajar, tapi untuk membangun produk nyata.
Gunakan pertanyaan reflektif dan prompt AI di akhir chapter sebagai latihan aktif. Membaca saja tidak cukup — kamu perlu menjelaskan ulang dengan kata-katamu sendiri.
Contoh Kode
import * as Battery from "expo-battery";
async function shouldRunHeavyTask(): Promise<boolean> {
const level = await Battery.getBatteryLevelAsync();
const state = await Battery.getBatteryStateAsync();
const lowPower = await Battery.isLowPowerModeEnabledAsync();
if (lowPower) return false;
if (state === Battery.BatteryState.CHARGING) return true;
return level > 0.5;
}Penjelasan Kode
Prompt AI
Desain BatteryManager module: class yang subscribe ke perubahan baterai, menentukan task priority berdasarkan battery state, dan mengimplementasikan deferral queue yang dieksekusi saat kondisi optimal.
Pertanyaan Reflektif
Cek Battery Usage di Settings HP-mu. Aplikasi apa yang paling boros? Apakah kamu sadar mereka melakukan background work? Apakah work itu sepadan dengan battery yang dihabiskan?