expo-task-manager
Jalankan task JavaScript saat app di background
Tujuan Pembelajaran
- Memahami TaskManager dan cara kerjanya di Expo
- Mampu mendefinisikan dan meregistrasi background task
- Mengerti batasan JavaScript runtime di background
Analogi
Task Manager = Asisten Pribadi:
- Kamu (foreground): kerja utama, tampil di layar
- Asisten (background): kerjakan tugas kecil tanpa ganggu kamu
- Kamu definisikan: "Setiap 15 menit, cek email baru"
- Asisten jalankan, simpan hasilnya, kasih tahu kalau ada yang baru
TaskManager seperti asisten pribadi — menjalankan tugas-tugas kecil di background tanpa gangguan. Kamu definisikan tugas, asisten eksekusi.
Penjelasan Konsep
TaskManager adalah komponen Expo yang mengelola background task. Setiap task diregistrasi dengan nama unik dan handler function.
Define task: TaskManager.defineTask(name, handler) — handler menerima { data, error }. Define di ROOT level file (App.tsx, bukan di dalam component). Ini wajib karena task harus terdaftar sebelum OS bisa memanggilnya.
Handler context: background task JALAN DI JAVASCRIPT THREAD TERPISAH. Ini berarti: (1) Tidak bisa akses React state/hooks. (2) Tidak bisa render UI. (3) Komunikasi hanya via storage/network. (4) Bisa di-terminate OS kapan saja.
Task types: (1) Background fetch — periodic task ringan. (2) Location — tracking lokasi. (3) Geofencing — region enter/exit. (4) Notification — push notification.
Handler best practices: (1) Cepat — maksimal 30 detik, kalau > OS akan kill task. (2) Idempotent — task bisa dijalankan >1x. (3) Error handling — return Result untuk kasih tahu OS status. (4) Minimal dependency — jangan import banyak library, bikin handler seringan mungkin.
Debugging background tasks: sulit karena tidak ada console visible. Gunakan: (1) Simpan log ke file/storage. (2) Expo dev tools: Remote JS debugging untuk background task. (3) Test di build production (bukan Expo Go) karena background task butuh build standalone.
Inti yang Perlu Dipahami
Bagian ini berfokus pada memahami TaskManager dan cara kerjanya di Expo., mampu mendefinisikan dan meregistrasi background task., dan mengerti batasan JavaScript runtime di background. Jangan terburu-buru menghafal istilahnya. Lebih penting untuk memahami peran setiap konsep dan kapan konsep itu muncul dalam pekerjaan web development.
Saat membaca expo-task-manager, gunakan tujuan belajar sebagai penanda arah. Kalau kamu sudah bisa menjelaskan tujuan itu dengan kata-katamu sendiri, berarti fondasinya mulai terbentuk.
Cara Membayangkannya
TaskManager seperti asisten pribadi — menjalankan tugas-tugas kecil di background tanpa gangguan. Kamu definisikan tugas, asisten eksekusi. 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. defineTask di level root file. Gunakan MMKV untuk logging (tidak bisa console.log yang terlihat). Return status string untuk memberi tahu OS hasil task.
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 TaskManager from "expo-task-manager";
import { MMKV } from "react-native-mmkv";
const DATA_SYNC_TASK = "data-sync";
const log = new MMKV({ id: "task-log" });
TaskManager.defineTask(DATA_SYNC_TASK, async ({ data, error }) => {
if (error) { log.set("last-error", error.message); return "failed"; }
try {
const offline = getOfflineQueue();
await syncToServer(offline);
log.set("last-sync", new Date().toISOString());
return "newData";
} catch (e) {
return "failed";
}
});Penjelasan Kode
Prompt AI
Buat debugging utility untuk background tasks: task logger yang menyimpan setiap eksekusi task dengan timestamp, result, dan error. Bisa dibaca dari app di foreground untuk analisis.
Pertanyaan Reflektif
Bagaimana kamu akan menguji background task di aplikasimu? Apakah ada cara untuk mensimulasikan background execution di development?