การทำงานเบื้องหลังในการพัฒนาแอปมือถือ — สาระสำคัญ ข้อจำกัด และหลักการทำงาน

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-03-26 เวลาอ่าน: 9 นาที

Background Execution เป็นกลไกที่อนุญาตให้โค้ดของแอปพลิเคชันมือถือทำงานเมื่อแอปไม่ได้อยู่ในเบื้องหน้า หากไม่มีกลไกนี้ ระบบจะหยุดการทำงานของแอปเมื่อย่อขนาด ตามข้อมูลจาก Apple, 2026 iOS จำกัดเวลาเบื้องหลังไว้ที่ 30 วินาที ในขณะที่ Android มีสถานการณ์ที่ยืดหยุ่นกว่าผ่าน WorkManager และ Foreground Service

ประเด็นสำคัญ

  • Background Execution — การเรียกใช้โค้ดของแอปเมื่อแอปถูกย่อหรือไม่ทำงาน
  • iOS — ข้อจำกัดที่เข้มงวด: 30 วินาทีสำหรับงาน, Background Modes และ App Refresh ที่เคร่งครัด
  • Android — WorkManager, Foreground Service, Scheduling และโหมด Doze ที่มีข้อจำกัดต่างกัน
  • การใช้พลังงาน — สาเหตุหลักของข้อจำกัด: กระบวนการเบื้องหลังลดอายุการใช้งานแบตเตอรี่
  • ความเป็นส่วนตัว — ตั้งแต่ Android 8 และ iOS 13 ระบบต้องการสิทธิ์ที่ชัดเจนสำหรับการทำงานเบื้องหลัง

การทำงานเบื้องหลังในแอปมือถือคืออะไร?

Background Execution คือความสามารถของแอปในการเรียกใช้โค้ดต่อหลังจากที่ผู้ใช้ย่อขนาดหรือเปลี่ยนไปยังแอปอื่น หากไม่มีกลไกพิเศษ ระบบปฏิบัติการมือถือจะทำให้แอปเข้าสู่สถานะ Suspended (หยุดชั่วคราว) ภายในไม่กี่วินาทีหลังจากเข้าสู่เบื้องหลัง โดยปล่อย CPU และหน่วยความจำสำหรับแอปที่ทำงานอยู่

สถานะของแอปในเบื้องหลัง

แอปมือถือผ่านหลายสถานะของวงจรชีวิต: Foreground (ทำงาน), Background (เบื้องหลัง), Suspended (หยุดชั่วคราว) และ Terminated (สิ้นสุด) Background เป็นสถานะเดียวที่แอปสามารถเรียกใช้โค้ดได้โดยไม่มีอินเทอร์เฟซที่มองเห็น iOS และ Android กำหนดระยะเวลาและการดำเนินการที่พร้อมใช้งานในสถานะนี้แตกต่างกัน

กรณีการใช้งานหลัก

การทำงานเบื้องหลังจำเป็นสำหรับการซิงโครไนซ์ข้อมูล การดาวน์โหลดเนื้อหา การประมวลผลการแจ้งเตือน Push การระบุตำแหน่งทางภูมิศาสตร์เบื้องหลัง และการเล่นเสียง การซิงโครไนซ์ เป็นสถานการณ์ที่พบบ่อยที่สุด: แอปส่งข้อมูลไปยังเซิร์ฟเวอร์หรือดาวน์โหลดอัปเดตโดยไม่ต้องให้ผู้ใช้มีส่วนร่วม

  • การซิงโครไนซ์ — การอัปโหลดและดาวน์โหลดข้อมูลเมื่อสถานะเครือข่ายเปลี่ยน
  • การระบุตำแหน่ง — การติดตามตำแหน่งในตัวติดตามฟิตเนสและแอปนำทาง
  • สื่อ — การเล่นเสียงและวิดีโอเบื้องหลัง (เพลง, พอดแคสต์)
  • การแจ้งเตือน — การประมวลผลการแจ้งเตือน Push และภายในเครื่อง
  • การดาวน์โหลด — การดาวน์โหลดไฟล์ขนาดใหญ่ (พอดแคสต์, วิดีโอ) เบื้องหลัง

เหตุใดระบบปฏิบัติการมือถือจึงจำกัดการทำงานเบื้องหลัง

ข้อจำกัด ของการทำงานเบื้องหลังเกิดจากสามปัจจัย: การใช้พลังงาน ประสิทธิภาพของอุปกรณ์ และความเป็นส่วนตัวของผู้ใช้ CPU และโมดูลวิทยุ (Wi-Fi, ข้อมูลมือถือ) ใช้พลังงานมากที่สุด — ทุกกระบวนการเบื้องหลังลดอายุการใช้งานแบตเตอรี่

การใช้พลังงานและอายุการใช้งานแบตเตอรี่

การศึกษาของ Google แสดงให้เห็นว่าแอปที่ทำงานเบื้องหลังทุก 5 นาทีจะลดอายุการใช้งานแบตเตอรี่ของอุปกรณ์ลง 20–30% ต่อวัน แม้แต่การทำงานเบื้องหลังที่ปรับให้เหมาะสมด้วยความถี่ชั่วโมงละครั้งก็มีผลกระทบที่สังเกตได้หากมีแอปดังกล่าวมากกว่าสองแอป

RAM และประสิทธิภาพ

แต่ละแอปเบื้องหลังใช้ RAM เมื่อ RAM ไม่เพียงพอ ระบบจะถ่ายแอปออกจากหน่วยความจำ ทำให้ต้องเริ่มต้นใหม่เมื่อผู้ใช้กลับมา iOS ใช้อัลกอริทึม Jetsam — กลไกการบังคับยุติกระบวนการเบื้องหลังเมื่อเกินขีดจำกัดหน่วยความจำ Android ใช้ LMK (Low Memory Killer) ด้วยหลักการที่คล้ายกัน

ความเป็นส่วนตัวของผู้ใช้

ตั้งแต่ Android 10 และ iOS 13 ระบบกำหนดให้แอปต้องประกาศวัตถุประสงค์ของการทำงานเบื้องหลัง Android ได้แนะนำข้อจำกัดในการเริ่ม Broadcast Receiver ในเบื้องหลัง iOS กำหนดให้ระบุ Background Mode ใน Capabilities ของโปรเจกต์ ผู้ใช้สามารถปิดการทำงานเบื้องหลังสำหรับแอปใดก็ได้ในการตั้งค่า

ระบบปฏิบัติการเวอร์ชันข้อจำกัดผลกระทบ
Android8.0IMPLICIT_BROADCAST ถูกห้าม67% ของ Broadcast เบื้องหลังเสีย
Android9.0Doze ดีขึ้นการเรียกเครือข่ายถูกจำกัด
Android12+Foreground Service ถูกจำกัดห้ามเริ่มจากเบื้องหลัง
iOS7+Background App Refreshหน้าต่างอัปเดตเป็นระยะ
iOS13+BGTaskSchedulerการจัดกำหนดการแทนการดำเนินการ

การทำงานเบื้องหลังบน Android: WorkManager และ Foreground Service

Android มีหลายกลไกสำหรับการทำงานเบื้องหลัง แต่ละกลไกแก้ปัญหาในหมวดหมู่ที่แตกต่างกัน WorkManager เป็น API ที่แนะนำสำหรับงานที่เลื่อนออกไปและงานเป็นระยะ Foreground Service สำหรับการดำเนินการทันทีพร้อมการแจ้งเตือนที่มองเห็น JobScheduler เป็นทางเลือกระดับต่ำของ WorkManager

WorkManager — โซลูชันสากล

WorkManager เป็นส่วนหนึ่งของ Android Jetpack ที่ให้การทำงานเบื้องหลังพร้อมรับประกันความสำเร็จแม้หลังรีสตาร์ทอุปกรณ์ API เลือกเวลาดำเนินการที่เหมาะสมที่สุดโดยพิจารณาจากสถานะเครือข่าย ระดับแบตเตอรี่ และโหมด Doze WorkManager เข้ากันได้กับ API 14+ และแทนที่ AlarmManager และ JobScheduler ที่เลิกใช้

Foreground Service — สำหรับการดำเนินการระยะยาว

เมื่อแอปต้องการทำงานที่ผู้ใช้มองเห็น (เล่นเพลง, บันทึกตำแหน่งทางภูมิศาสตร์) จะใช้ Foreground Service บริการจะแสดงการแจ้งเตือนถาวรในแถบสถานะและมีลำดับความสำคัญสูงกว่า — ระบบจะไม่ยุติจนกว่างานจะเสร็จ ตั้งแต่ Android 13 ต้องได้รับอนุญาต POST_NOTIFICATIONS

โหมด Doze และการเพิ่มประสิทธิภาพแบตเตอรี่

ตั้งแต่ Android 6.0 อุปกรณ์จะเข้าสู่โหมด Doze เมื่อไม่ได้ใช้งาน ในโหมดนี้ การดำเนินการเครือข่าย การซิงโครไนซ์ และ JobScheduler จะถูกเลื่อนออกไป WorkManager จะปรับตัวเข้ากับ Doze โดยอัตโนมัติ — งานจะดำเนินการในช่วง Maintenance Window ถัดไปเมื่ออุปกรณ์ตื่นจากการนอนเพื่อการบำรุงรักษา

การทำงานเบื้องหลังบน iOS: Background Tasks และ App Refresh

iOS ใช้แนวทางที่เข้มงวดมากขึ้นสำหรับการทำงานเบื้องหลัง Background App Refresh เป็นกลไกหลักสำหรับการอัปเดตข้อมูลเป็นระยะ BGTaskScheduler เป็น API สำหรับจัดกำหนดการงานตามสถานะของระบบ สำหรับการดำเนินการระยะยาว มี Background Modes: audio, location, voip, fetch และ processing

Background App Refresh

Background App Refresh อนุญาตให้แอปตื่นทุก 15–30 นาทีเพื่อซิงโครไนซ์ข้อมูล เวลาตื่นขึ้นอยู่กับพฤติกรรมของผู้ใช้ — ระบบวิเคราะห์ความถี่ที่ผู้ใช้เปิดแอป ผู้ใช้สามารถปิดคุณสมบัตินี้สำหรับแอปแต่ละรายการในการตั้งค่า — ทั่วไป — Background App Refresh

BGTaskScheduler — แนวทางสมัยใหม่

ตั้งแต่ iOS 13 BGTaskScheduler ได้แทนที่ performFetch และ beginBackgroundTask ที่เลิกใช้ แอปจะลงทะเบียนงานด้วยตัวระบุและช่วงเวลาขั้นต่ำ และระบบจะกำหนดเวลาดำเนินการที่เหมาะสมที่สุด งานแบ่งออกเป็นสองประเภท: BGProcessingTask (ระยะยาว, 10+ นาที) และ BGAppRefreshTask (สั้น, สูงสุด 30 วินาที)

ข้อจำกัดเวลาดำเนินการ

iOS จัดสรร เวลาที่จำกัด สำหรับการทำงานเบื้องหลัง — สูงสุด 30 วินาทีสำหรับ BGAppRefreshTask และสูงสุด 10 นาทีสำหรับ BGProcessingTask เมื่อเกินขีดจำกัด ระบบจะบังคับยุติงาน นักพัฒนาต้องเรียกตัวจัดการหมดอายุ (expiration handler) เพื่อบันทึกผลลัพธ์ระหว่างกลาง

ตัวอย่างโค้ด: Android WorkManager

มาดูการใช้งานจริงของการทำงานเบื้องหลังบน Android โดยใช้ WorkManager ตัวอย่างการซิงโครไนซ์ข้อมูลทุก 8 ชั่วโมงโดยคำนึงถึงสถานะเครือข่าย WorkManager รับประกันการทำงานแม้หลังจากรีสตาร์ทอุปกรณ์

kotlin
class SyncWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
    override fun doWork(): Result {
        return try {
            syncDataToServer()
            Log.d("Sync", "ข้อมูลถูกซิงโครไนซ์แล้ว")
            Result.success()
        } catch (e: Exception) {
            Result.retry()
        }
    }
}

// เรียกใช้งานเป็นระยะทุก 8 ชั่วโมง
val constraints = Constraints.Builder()
    .setRequiredNetworkType(NetworkType.CONNECTED)
    .setRequiresCharging(false)
    .build()

val syncRequest = PeriodicWorkRequestBuilder<SyncWorker>(
    8, TimeUnit.HOURS
).setConstraints(constraints).build()

WorkManager.getInstance(context).enqueue(syncRequest)

Foreground Service พร้อมการแจ้งเตือน

สำหรับการดำเนินการระยะยาวที่ผู้ใช้มองเห็น ใช้ Foreground Service ตัวอย่างการดาวน์โหลดไฟล์พร้อมแสดงความคืบหน้าในการแจ้งเตือน บริการเรียก startForeground() พร้อมการแจ้งเตือนที่ไม่สามารถปัดออกได้ เมื่อดาวน์โหลดเสร็จ — stopForeground(STOP_FOREGROUND_REMOVE)

kotlin
class DownloadService : Service() {
    override fun onStartCommand(intent: Intent?, flags: Int, id: Int): Int {
        startForeground(NOTIFICATION_ID, createNotification())
        downloadFile()
        stopForeground(STOP_FOREGROUND_REMOVE)
        stopSelf()
        return START_NOT_STICKY
    }
    private fun createNotification(): Notification {
        return NotificationCompat.Builder(this, CHANNEL_ID)
            .setContentTitle("ดาวน์โหลดไฟล์")
            .setSmallIcon(android.R.drawable.ic_download)
            .build()
    }
}

ตัวอย่างโค้ด: iOS BGTaskScheduler

บน iOS การทำงานเบื้องหลังถูกกำหนดค่าผ่าน BGTaskScheduler ตัวอย่างการลงทะเบียนและดำเนินการอัปเดตเนื้อหา แอปต้องลงทะเบียนตัวระบุงานใน Info.plist และเรียก submit เมื่องานควรถูกจัดกำหนดการ

swift
import BackgroundTasks

func registerBackgroundTask() {
    BGTaskScheduler.shared.register(
        forTaskWithIdentifier: "com.app.refresh",
        using: nil
    ) { task in
        self.handleAppRefresh(task: task as! BGAppRefreshTask)
    }
}

func scheduleAppRefresh() {
    let request = BGAppRefreshTaskRequest(
        identifier: "com.app.refresh"
    )
    request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60)
    try? BGTaskScheduler.shared.submit(request)
}

func handleAppRefresh(task: BGAppRefreshTask) {
    scheduleAppRefresh()
    task.expirationHandler = {
        // บันทึกข้อมูลระหว่างกลาง
        cacheCurrentState()
    }
    fetchLatestData {
        task.setTaskCompleted(success: true)
    }
}

Background Processing Task

สำหรับการดำเนินการระยะยาว (ล้างแคช, ประมวลผลข้อมูล) ใช้ BGProcessingTask ระบบให้เวลาสูงสุด 10 นาทีสำหรับการดำเนินการ จะทำงานเฉพาะเมื่ออุปกรณ์กำลังชาร์จและเชื่อมต่อ Wi-Fi ต้องใช้ตัวระบุแยกต่างหากใน Info.plist และการลงทะเบียนผ่าน register(forTaskWithIdentifier:)

swift
func scheduleProcessing() {
    let request = BGProcessingTaskRequest(
        identifier: "com.app.cleanup"
    )
    request.requiresExternalPower = true
    request.requiresNetworkConnectivity = true
    request.earliestBeginDate = Date(timeIntervalSinceNow: 24 * 60 * 60)
    try? BGTaskScheduler.shared.submit(request)
}

การเปรียบเทียบแนวทางของ Android และ iOS

Android และ iOS แตกต่างกันโดยพื้นฐานในปรัชญาการทำงานเบื้องหลัง Android มีเครื่องมือที่ยืดหยุ่นพร้อมการควบคุมมากขึ้นแต่ต้องการให้นักพัฒนาเลือก API ที่ถูกต้อง iOS จำกัดความสามารถแต่รับประกันประสิทธิภาพที่เสถียรและอายุการใช้งานแบตเตอรี่สำหรับผู้ใช้

เกณฑ์AndroidiOS
API ที่แนะนำWorkManagerBGTaskScheduler
เวลาสูงสุดของงานไม่จำกัด (Foreground Service)30 วินาที / 10 นาที (processing)
งานเป็นระยะใช่ ผ่าน PeriodicWorkRequestใช่ ผ่าน BGAppRefreshTask
รับประกันการดำเนินการใช่ แม้หลังรีสตาร์ทไม่ — ระบบตัดสินใจเมื่อไร
การเข้าถึงเครือข่ายเบื้องหลังจำกัดโดยโหมด Dozeผ่าน URLSession พร้อม background config
การระบุตำแหน่งเบื้องหลังForeground Service + สิทธิ์Background Mode location + NSLocation
เสียงเบื้องหลังForeground Service พร้อมการแจ้งเตือนสื่อBackground Mode audio + AVAudioSession

เมื่อใดควรเลือก Android WorkManager

WorkManager เหมาะสำหรับงานที่ต้องเสร็จสมบูรณ์โดยไม่ขึ้นกับสถานะของแอป: การซิงโครไนซ์ข้อมูล การส่ง analytics การประมวลผลคิว API รับประกัน การดำเนินการแม้หลังจากปิดอุปกรณ์ — งานจะถูกจัดกำหนดการใหม่หลังจากบูต

เมื่อใดควรเลือก iOS BGTaskScheduler

BGTaskScheduler เหมาะสำหรับงานที่ระบบสามารถดำเนินการได้ทุกเวลาที่สะดวก: ดาวน์โหลดเนื้อหาใหม่ อัปเดตวิดเจ็ต ล้างแคช ไม่เหมาะ สำหรับการดำเนินการเร่งด่วน — ระบบจะเลื่อนงานหากอุปกรณ์อยู่ในโหมด Doze หรือแบตเตอรี่ต่ำ

คำถามที่พบบ่อย

ความแตกต่างระหว่าง Background Execution และ Background Modes คืออะไร?

Background Execution เป็นแนวคิดทั่วไปที่อธิบายโค้ดใดๆ ที่ทำงานเบื้องหลัง Background Modes เป็นกลไกเฉพาะของ iOS ที่อนุญาตให้แอปดำเนินการบางประเภทเบื้องหลัง: เสียง, การระบุตำแหน่ง, VoIP, fetch Android ใช้แนวทางที่คล้ายกันผ่านประเภทของ Foreground Service

เหตุใดแอปของฉันจึงสิ้นสุดหลังจาก 30 วินาทีในเบื้องหลัง?

บน iOS นี่คือขีดจำกัดมาตรฐานสำหรับ BGAppRefreshTask ระบบจะบังคับยุติงานเมื่อถึงขีดจำกัด บน Android สถานการณ์ที่คล้ายกันเกิดขึ้นเมื่อแอปไม่ใช้ WorkManager หรือ Foreground Service — Service ทั่วไปจะถูกยุติโดยระบบหลังจากเข้าสู่เบื้องหลัง

จะรับประกันการทำงานบนทั้งสองแพลตฟอร์มได้อย่างไร?

บน Android ใช้ WorkManager — รับประกันการดำเนินการแม้หลังรีสตาร์ท บน iOS ไม่สามารถรับประกันการดำเนินการได้ — ระบบตัดสินใจเมื่อจะเรียกใช้แอป วิธีเดียวที่จะรับประกันการดำเนินการคือใช้ Background Modes (audio, location) พร้อมตัวบ่งชี้ที่มองเห็นสำหรับผู้ใช้

จะตรวจสอบว่าอนุญาตให้ทำงานเบื้องหลังได้อย่างไร?

บน iOS เรียก UIApplication.shared.backgroundRefreshStatus — สถานะ .available, .denied หรือ .restricted บน Android ใช้ PowerManager.isIgnoringBatteryOptimizations() เพื่อตรวจสอบการยกเว้นการเพิ่มประสิทธิภาพแบตเตอรี่ สำหรับ WorkManager ไม่จำเป็นต้องตรวจสอบ — API จัดการข้อจำกัดของระบบเอง

มีทางเลือกใดบ้างสำหรับการทำงานเบื้องหลัง?

การแจ้งเตือน Push เป็นกลไกหลักสำหรับการกระตุ้นการทำงานโดยไม่ต้องใช้โค้ดเบื้องหลัง บน iOS มี PushKit สำหรับ VoIP และ Silent Push สำหรับการอัปเดตข้อมูล บน Android — High Priority FCM และ Notification Trampoline WebSockets ผ่าน Foreground Service เป็นทางเลือกสำหรับแอปแบบเรียลไทม์

สรุป

  • Background Execution — กลไกการเรียกใช้โค้ดเมื่อแอปถูกย่อ สำคัญสำหรับการซิงโครไนซ์ การดาวน์โหลด และการแจ้งเตือน
  • Android มี WorkManager (รับประกันการดำเนินการ), Foreground Service (งานที่มองเห็นระยะยาว) และข้อจำกัดของโหมด Doze
  • iOS ใช้ BGTaskScheduler (การจัดกำหนดการ), Background App Refresh (การอัปเดตเป็นระยะ) และ Background Modes สำหรับสื่อและการระบุตำแหน่ง
  • การใช้พลังงาน — สาเหตุหลักของข้อจำกัด: กระบวนการเบื้องหลังที่ไม่ปรับให้เหมาะสมลดอายุการใช้งานแบตเตอรี่ 20–30%
  • ความเป็นส่วนตัว — ทั้งสองแพลตฟอร์มต้องการสิทธิ์ที่ชัดเจน (Android POST_NOTIFICATIONS, iOS Background Modes) และการแจ้งเตือนผู้ใช้
  • WorkManager เป็น API เดียวที่รับประกันการดำเนินการหลังรีสตาร์ท; BGTaskScheduler ขึ้นอยู่กับการตัดสินใจของระบบ
  • ใช้ Foreground Service บน Android และ Background Modes บน iOS สำหรับการดำเนินการระยะยาวที่ผู้ใช้มองเห็นในแถบสถานะ

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม