Lewati ke konten utama
menjadi.dev
Chapter 49.1 Mobile Lanjutan

Background Fetch API

Download data di background sebelum user buka app

Tujuan Pembelajaran

  • Memahami konsep background fetch di mobile
  • Mampu menggunakan expo-background-fetch
  • Mengerti kapan dan kapan tidak menggunakan background fetch

Analogi

Diagram

      Background Fetch = Koran Pagi:
- Setiap pagi, koran sudah di depan pintu
- Kamu gak perlu keluar beli — sudah siap
- Pas buka app → data terbaru sudah ada

Background fetch = petugas koran. Saat app di background, dia fetch data terbaru. User buka app → langsung liat data fresh.
    

Background fetch seperti loper koran — saat app di belakang layar, dia diam-diam fetch data terbaru. User buka app langsung lihat konten fresh tanpa loading.

Penjelasan Konsep

Background fetch memungkinkan aplikasi menjalankan task pendek di background secara periodik. OS menentukan kapan task dijalankan — berdasarkan usage pattern dan battery level.

Setup: (1) expo-background-fetch + expo-task-manager. (2) Define task: TaskManager.defineTask(TASK_NAME, async () => { ... return BackgroundFetch.Result.NewData }). (3) Register: BackgroundFetch.registerTaskAsync(TASK_NAME, { minimumInterval: 900, stopOnTerminate: false }).

Interval: minimumInterval dalam detik (minimum 900 = 15 menit). INI HANYA MINIMUM — OS bisa delay lebih lama. Jangan harap presisi. stopOnTerminate: false → task tetap jalan meski app di-swipe kill (iOS terbatas).

Result: (1) NewData — data baru berhasil di-fetch, beri tahu OS ini. (2) NoData — tidak ada data baru di server. (3) Failed — error, coba lagi nanti.

Use cases: (1) News app — fetch berita terbaru saat user tidur. (2) Weather app — update ramalan cuaca. (3) Social media — pre-fetch timeline (tapi tidak real-time, lebih baik WebSocket/push notification). (4) Sync — upload offline data ke server.

Batasan: (1) Tidak real-time — jangan pakai untuk chat. (2) OS bisa throttle/delay. (3) iOS: background fetch dihentikan kalau user jarang buka app. (4) Tidak bisa pakai React state — simpan hasil ke storage/asyncdb.

Inti yang Perlu Dipahami

Bagian ini berfokus pada memahami konsep background fetch di mobile., mampu menggunakan expo-background-fetch., dan mengerti kapan dan kapan tidak menggunakan background fetch. Jangan terburu-buru menghafal istilahnya. Lebih penting untuk memahami peran setiap konsep dan kapan konsep itu muncul dalam pekerjaan web development.

Saat membaca Background Fetch API, gunakan tujuan belajar sebagai penanda arah. Kalau kamu sudah bisa menjelaskan tujuan itu dengan kata-katamu sendiri, berarti fondasinya mulai terbentuk.

Cara Membayangkannya

Background fetch seperti loper koran — saat app di belakang layar, dia diam-diam fetch data terbaru. User buka app langsung lihat konten fresh tanpa loading. 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. TaskManager.defineTask untuk handler. Gunakan BackgroundFetch.Result untuk kasih tahu OS status task. minimumInterval 900 detik (15 menit). Cache hasil ke storage untuk dibaca app.

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

tsx
import * as BackgroundFetch from "expo-background-fetch";
import * as TaskManager from "expo-task-manager";

const FETCH_TASK = "background-fetch";

TaskManager.defineTask(FETCH_TASK, async () => {
  try {
    const newPosts = await fetchNewPosts();
    if (newPosts.length > 0) {
      await cachePosts(newPosts);
      return BackgroundFetch.BackgroundFetchResult.NewData;
    }
    return BackgroundFetch.BackgroundFetchResult.NoData;
  } catch {
    return BackgroundFetch.BackgroundFetchResult.Failed;
  }
});

async function registerFetch() {
  await BackgroundFetch.registerTaskAsync(FETCH_TASK, { minimumInterval: 900, stopOnTerminate: false });
}

Penjelasan Kode

TaskManager.defineTask untuk handler. Gunakan BackgroundFetch.Result untuk kasih tahu OS status task. minimumInterval 900 detik (15 menit). Cache hasil ke storage untuk dibaca app.

Prompt AI

Desain strategi background pre-fetch untuk aplikasi berita: (a) fetch headlines setiap 30 menit, (b) download artikel untuk offline reading, (c) cek update hanya saat WiFi. Tulis handler + register config.

Pertanyaan Reflektif

Apakah lebih baik pre-fetch data di background (boros baterai, data siap saat buka) atau fetch saat buka app (hemat baterai, loading screen)? Diskusikan trade-off.