Foreground Service: คืออะไร ประเภท และกลไกการทำงาน

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

Foreground Service คือบริการ Android ที่ดำเนินการระยะยาวที่ผู้ใช้มองเห็นได้ โดยมีการแจ้งเตือนบังคับในแถบสถานะ แตกต่างจาก Background Service ซึ่งระบบสามารถหยุดได้เมื่อทรัพยากรไม่เพียงพอ Foreground Service จะได้รับลำดับความสำคัญสูงและทำงานต่อไปแม้ในสภาวะหน่วยความจำจำกัด ตามเอกสารของ Android Developers, 2025 Foreground Service ยังคงเป็นวิธีที่เชื่อถือได้เพียงวิธีเดียวในการทำงานระยะยาวบนอุปกรณ์ที่ใช้ Android 12 ขึ้นไป

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

  • Foreground Service — บริการที่มีการแจ้งเตือนบังคับซึ่งผู้ใช้มองเห็นได้ในแถบสถานะ
  • Notification — องค์ประกอบบังคับ หากไม่มีระบบจะไม่อนุญาตให้เริ่มบริการ
  • ลำดับความสำคัญ — Foreground Service จะไม่ถูกหยุดเมื่อหน่วยความจำไม่เพียงพอ แตกต่างจาก Background Service
  • Android 12+ — มีการนำข้อจำกัดในการเริ่ม foreground service จากพื้นหลังมาใช้
  • Foreground Service Type — การประกาศประเภทบริการบังคับสำหรับ API เป้าหมาย 34+

Foreground Service คืออะไร

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

ระบบ Android ถือว่า Foreground Service เป็นกระบวนการที่สำคัญอย่างยิ่ง เมื่อ RAM ไม่เพียงพอ แพลตฟอร์มจะยุติ Background Services ก่อน จากนั้นจึงยุติ Activities ที่ถูกแคชไว้ และเฉพาะในกรณีพิเศษเท่านั้น — Foreground Service OOM Killer จะกำหนด ระดับ ADJ 2 ให้กับบริการดังกล่าว ซึ่งในทางปฏิบัติแล้วทำให้ไม่สามารถบังคับยุติได้

ในการเริ่ม Foreground Service นักพัฒนาจะต้องเรียกเมธอด startForeground() ภายในไม่กี่วินาทีหลังจากสร้างบริการ มิฉะนั้นระบบจะสร้างข้อยกเว้น ForegroundServiceDidNotStartInTimeException นี่คือข้อกำหนดที่เข้มงวดของแพลตฟอร์มที่นำมาใช้เพื่อป้องกันงานพื้นหลังที่ไม่ได้รับการประกาศ

ประวัติ

กลไก Foreground Service ถูกนำมาใช้ใน Android 1.0 พร้อมกับ SDK แรก แต่การแจ้งเตือนบังคับปรากฏใน Android 9 (API 28) ก่อนหน้านั้น บริการสามารถทำงานในเบื้องหน้าโดยไม่มีตัวบ่งชี้ที่ผู้ใช้มองเห็นได้ ตั้งแต่ Android 9 เป็นต้นไป Google ได้ทำให้ข้อกำหนดเข้มงวดขึ้น: แอปพลิเคชันใดๆ ที่เรียก startForeground จะต้องให้การแจ้งเตือนภายใน 5 วินาที หลังจากเริ่มบริการ

ใน Android 12 (API 31) มีการเพิ่มข้อจำกัดในการเริ่ม Foreground Service จากบริบทพื้นหลัง — ตอนนี้สิทธิ์ FOREGROUND_SERVICE_SPECIAL_USE จำเป็นสำหรับหลายสถานการณ์ Android 14 (API 34) นำการประกาศบังคับของ foregroundServiceType ในแมนิเฟสต์ ทำให้สถาปัตยกรรมบริการโปร่งใสและคาดเดาได้มากขึ้น

Foreground Service ทำงานอย่างไร

กลไกการทำงานของ Foreground Service ขึ้นอยู่กับสามขั้นตอนหลัก: การสร้างบริการ การผูกการแจ้งเตือน และการดำเนินงาน บริการสืบทอดจากคลาส Service และแทนที่เมธอด onStartCommand() ซึ่งเรียก startForeground() พร้อมกับตัวระบุและออบเจ็กต์ Notification

หลังจากเรียก startForeground() ระบบจะย้ายกระบวนการบริการไปยังกลุ่มเบื้องหน้าด้วยลำดับความสำคัญการอยู่รอดที่สูงขึ้น ซึ่งหมายความว่า Android จะพยายามรักษากระบวนการให้ทำงานโดยไม่คำนึงถึงโหลดของ RAM Foreground Service ไม่สามารถหยุดโดยระบบได้ในสภาวะปกติ — เฉพาะเมื่อผู้ใช้ปัดการแจ้งเตือนทิ้ง หรือเรียก stopSelf() อย่างชัดเจน

วงจรชีวิตของ Foreground Service จัดการผ่านเมธอด onCreate(), onStartCommand() และ onDestroy() ใน onStartCommand() นักพัฒนาจะกำหนดกลยุทธ์การเริ่มใหม่หลังจากกระบวนการถูกฆ่า — ค่าคงที่ START_STICKY บังคับให้ระบบสร้างบริการใหม่หลังจากทรัพยากรถูกกู้คืน ในขณะที่ START_NOT_STICKY ป้องกันการเริ่มใหม่โดยอัตโนมัติ

วงจรชีวิตและสถานะ

เมื่อเริ่ม Foreground Service ขั้นตอนจะดำเนินการตามลำดับ: เรียก startService(), สร้างออบเจ็กต์ Service ใน onCreate(), ประมวลผล Intent ใน onStartCommand() และเรียก startForeground() พร้อมกับออบเจ็กต์ Notification หากบริการกำลังทำงานอยู่และ Intent ใหม่มาถึง จะเรียกเฉพาะ onStartCommand() อีกครั้ง — onCreate() จะดำเนินการเพียงครั้งเดียวตลอดอายุของบริการ

การหยุด Foreground Service เกิดขึ้นผ่าน stopForeground() ด้วยแฟล็ก REMOVE_NOTIFICATION ซึ่งซ่อนการแจ้งเตือนจากแถบสถานะ ทันทีหลังจากลบการแจ้งเตือน ระบบอาจหยุดถือว่าบริการเป็นเบื้องหน้าและลดลำดับความสำคัญลงเป็น Background Service ทำให้กระบวนการเสี่ยงต่อการถูกยุติ

การทำงานร่วมกับ PowerManager

PowerManager มีบทบาทสำคัญในการทำงานของ Foreground Service เนื่องจากโหมดประหยัดพลังงานของ Android (Doze, App Standby) อาจจำกัดความสามารถในการดำเนินงาน แม้อยู่ในสถานะเบื้องหน้า บริการก็ยังอยู่ภายใต้นโยบายแบตเตอรี่ — คำขอเครือข่ายอาจถูกเลื่อนออกไป และตัวจับเวลาอาจถูกซิงค์กับหน้าต่าง Doze สำหรับการดำเนินการระยะยาวที่ทนต่อความล่าช้า แนะนำให้ใช้ Foreground Service ร่วมกับ WorkManager

ประเภทหลักของ Foreground Service

ตั้งแต่ Android 14 (API 34) เป็นต้นไป Google ได้นำการประกาศประเภท Foreground Service แบบบังคับในแมนิเฟสต์มาใช้ แต่ละประเภทกำหนดสถานการณ์การใช้งานที่ได้รับอนุญาต — ระบบจะตรวจสอบความสอดคล้องระหว่างประเภทที่ประกาศและพฤติกรรมจริงของบริการ มีทั้งหมด 9 ประเภท แต่ประเภทที่ใช้บ่อยที่สุดมีดังต่อไปนี้

dataSync

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

mediaPlayback

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

location

ประเภท location มีไว้สำหรับบริการระบุตำแหน่งทางภูมิศาสตร์ — แอปนำทาง การติดตามกิจกรรม การกำหนดขอบเขตทางภูมิศาสตร์ สำหรับ Android 14+ จำเป็นต้องประกาศสิทธิ์ FOREGROUND_SERVICE_LOCATION และระบุประเภทในแมนิเฟสต์ แอปพลิเคชันต้องมีสิทธิ์ตำแหน่งที่ทำงานอยู่ขณะรันไทม์ มิฉะนั้นระบบจะปฏิเสธการเริ่มบริการ

ประเภทสิทธิ์ตัวอย่างการใช้งาน
dataSyncFOREGROUND_SERVICE_DATA_SYNCซิงค์ไฟล์กับคลาวด์
mediaPlaybackFOREGROUND_SERVICE_MEDIA_PLAYBACKเครื่องเล่นเพลงในพื้นหลัง
locationFOREGROUND_SERVICE_LOCATIONGPS นำทางขณะขับรถ
cameraFOREGROUND_SERVICE_CAMERAแอปพลิเคชันเฝ้าระวังวิดีโอ
connectedDeviceFOREGROUND_SERVICE_CONNECTED_DEVICEทำงานกับอุปกรณ์ BLE

Foreground Service เทียบกับ Background Service

ความแตกต่างหลักระหว่าง Foreground และ Background Service คือการมีการแจ้งเตือนที่มองเห็นได้และลำดับความสำคัญการอยู่รอด Background Service สามารถถูกหยุดโดยระบบได้ทุกเมื่อเมื่อหน่วยความจำไม่เพียงพอ ในขณะที่ Foreground Service ยังคงทำงานต่อไปเนื่องจาก ระดับ adj ของกระบวนการที่สูงขึ้นในกลไก Low Memory Killer ของ Android

Background Service ไม่ต้องการการแจ้งเตือนและสามารถทำงานโดยผู้ใช้ไม่รู้ตัว อย่างไรก็ตาม ตั้งแต่ Android 8 (API 26) เป็นต้นไป Google ได้จำกัดบริการพื้นหลังอย่างมาก: startService() จากบริบทพื้นหลังไม่ทำงานอีกต่อไป และ Context.startForegroundService() กลายเป็นข้อบังคับสำหรับการเริ่มบริการใดๆ ที่วางแผนจะเปลี่ยนไปใช้เบื้องหน้า ระบบยังนำ ข้อจำกัดการดำเนินการพื้นหลังมาใช้ — ตัวจับเวลา (ปัจจุบัน 10 นาที) หลังจากนั้น Background Service จะถูกหยุดโดยบังคับ

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

ตารางเปรียบเทียบ

พารามิเตอร์Foreground ServiceBackground Service
การแจ้งเตือนบังคับไม่จำเป็น
อายุการใช้งานไม่มีข้อจำกัดสูงสุด 10 นาที (API 26+)
ลำดับความสำคัญของระบบสูง (ADJ 2)ต่ำ (ADJ 8+)
การเริ่ม API 26+startForegroundService()ห้ามจากพื้นหลัง

ข้อกำหนดใน Android 12+

ตั้งแต่ Android 12 (API 31) เป็นต้นไป Google ได้นำข้อจำกัดที่สำคัญในการเริ่ม Foreground Service มาใช้ การเปลี่ยนแปลงหลักคือการห้ามเรียก startForegroundService() จากบริบทพื้นหลังสำหรับบริการส่วนใหญ่ ข้อยกเว้นจะใช้เฉพาะเมื่อผู้ใช้ให้ความยินยอมอย่างชัดแจ้ง (เช่น ผ่านสิทธิ์ FOREGROUND_SERVICE_SPECIAL_USE) หรือเมื่อบริการเริ่มต้นเพื่อตอบสนองต่ออินเทนต์แพร่ภาพ BOOT_COMPLETED

แมนิเฟสต์ของแอปพลิเคชันที่กำหนดเป้าหมาย API 34+ ต้องมีบล็อก foregroundServiceType สำหรับแต่ละบริการที่ประกาศ ตัวอย่างเช่น สำหรับบริการซิงค์ข้อมูล ให้ระบุ android:foregroundServiceType="dataSync" หากไม่ได้ระบุประเภท ระบบจะถือว่าบริการไม่ถูกต้องและส่งข้อยกเว้น MissingForegroundServiceTypeException เมื่อพยายามเริ่ม Google Play ยังตรวจสอบความสอดคล้องของประเภทและอาจปฏิเสธการเผยแพร่หากไม่ตรงกัน

สิทธิ์สำหรับ Android 14+

ใน Android 14 (API 34) แต่ละประเภทของ Foreground Service มีสิทธิ์ที่สอดคล้องกัน นักพัฒนาจะต้องประกาศสิทธิ์เหล่านั้นในแมนิเฟสต์และขอสิทธิ์ขณะรันไทม์ก่อนเริ่มบริการ สำหรับ dataSync จำเป็นต้องใช้ FOREGROUND_SERVICE_DATA_SYNC; สำหรับ mediaPlayback จำเป็นต้องใช้ FOREGROUND_SERVICE_MEDIA_PLAYBACK ผู้ใช้สามารถเพิกถอนสิทธิ์ในการตั้งค่า ซึ่งจะหยุดบริการที่ทำงานอยู่

Google ยังได้นำกลไก Foreground Service Notification Timeout มาใช้ใน Android 14: หากบริการไม่เรียก startForeground() ภายใน 10 วินาทีหลังจากสร้าง ระบบจะสร้างข้อยกเว้น การเข้มงวดนี้มีเป้าหมายเพื่อต่อสู้กับแอปพลิเคชันที่ชะลอหรือข้ามการเรียกการแจ้งเตือน โดยทำงานเป็น Background Service ภายใต้หน้ากากของ foreground

กรณีการใช้งาน Foreground Service

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

เครื่องเล่นสื่อและการสตรีมเสียง

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

ตัวติดตาม GPS และการนำทาง

แอปพลิเคชันนำทางใช้ Foreground Service ประเภท location สำหรับการติดตามพิกัดอย่างต่อเนื่อง บริการแสดงการแจ้งเตือนด้วยความเร็วปัจจุบัน เวลาเดินทาง และปุ่มหยุดการติดตาม หากไม่มี Foreground Service ระบบจะหยุดรับพิกัดในพื้นหลังหลังจากไม่กี่นาที ทำให้การนำทางเป็นไปไม่ได้

การโทร VoIP

แอปพลิเคชันโทรด้วยเสียงและวิดีโอ — ไคลเอ็นต์ VoIP — ใช้ Foreground Service เพื่อรักษาการเชื่อมต่อที่ทำงานอยู่ บริการประเภท phoneCall (ตั้งแต่ Android 14) รับประกันว่าสายจะไม่หลุดเมื่อย่อแอปพลิเคชัน การแจ้งเตือนแสดงระยะเวลาสายและการควบคุมไมโครโฟนและลำโพง

  • เครื่องเล่นสื่อ — การสตรีมเสียง พอดแคสต์ เครื่องเล่นวิดีโอที่มีพื้นหลัง
  • การนำทาง — การติดตาม GPS การกำหนดขอบเขตทางภูมิศาสตร์ ตัวนำทางสำหรับขับรถ
  • การโทร VoIP — Skype, Zoom, Telegram — การรักษาสายที่ทำงานอยู่
  • ตัวติดตามฟิตเนส — การนับก้าว การตรวจสอบอัตราการเต้นของหัวใจ การออกกำลังกาย
  • การซิงค์ — การอัปโหลดรูปภาพ การสำรองข้อมูล การอัปเดตเนื้อหาออฟไลน์

การสร้าง Foreground Service ใน Kotlin

มาดูการสร้าง Foreground Service ใน Kotlin สำหรับการซิงค์ข้อมูลกัน บริการจะเริ่มจาก Activity แสดงการแจ้งเตือนพร้อมความคืบหน้า และสิ้นสุดอย่างถูกต้องหลังจากเสร็จสิ้น ตัวอย่างแสดงองค์ประกอบบังคับทั้งหมด: การประกาศในแมนิเฟสต์ ช่องทางการแจ้งเตือน การเรียก startForeground() และการจัดการ foregroundServiceType

kotlin
class SyncService : Service() {

    companion object {
        const val CHANNEL_ID = "sync_channel"
        const val NOTIFICATION_ID = 1001
    }

    override fun onCreate() {
        super.onCreate()
        createNotificationChannel()
    }

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        val notification = buildNotification()
        startForeground(NOTIFICATION_ID, notification)
        performSync()
        return START_STICKY
    }

    private fun createNotificationChannel() {
        val channel = NotificationChannel(
            CHANNEL_ID,
            "การซิงค์",
            NotificationManager.IMPORTANCE_LOW
        ).apply {
            description = "ช่องทางการซิงค์ข้อมูล"
        }
        val manager = getSystemService(NotificationManager::class.java)
        manager.createNotificationChannel(channel)
    }

    private fun buildNotification(): Notification {
        return NotificationCompat.Builder(this, CHANNEL_ID)
            .setContentTitle("การซิงค์")
            .setContentText("การอัปโหลดข้อมูลไปยังเซิร์ฟเวอร์")
            .setSmallIcon(R.drawable.ic_sync)
            .setOngoing(true)
            .build()
    }

    private fun performSync() {
        GlobalScope.launch(Dispatchers.IO) {
            // การจำลองการซิงค์
            delay(5000)
            stopForeground(Service.STOP_FOREGROUND_REMOVE)
            stopSelf()
        }
    }

    override fun onBind(intent: Intent): IBinder? = null
}

การประกาศบริการในแมนิเฟสต์

เพื่อให้บริการทำงานอย่างถูกต้องบน Android 12+ คุณต้องประกาศ Foreground Service ใน AndroidManifest.xml โดยระบุประเภทและสิทธิ์ที่จำเป็น แอตทริบิวต์ foregroundServiceType เป็นข้อบังคับสำหรับ API เป้าหมาย 34+ และสิทธิ์ FOREGROUND_SERVICE_DATA_SYNC และ POST_NOTIFICATIONS ต้องถูกขอขณะรันไทม์

xml
<!-- AndroidManifest.xml -->
<uses-permission
    android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission
    android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permission
    android:name="android.permission.POST_NOTIFICATIONS" />

<application ...>
    <service
        android:name=".SyncService"
        android:foregroundServiceType="dataSync"
        android:exported="false" />
</application>

ข้อจำกัดและทางเลือก

แม้จะมีความน่าเชื่อถือสูง Foreground Service ก็มีข้อจำกัด ข้อหลักคือการมองเห็นต่อผู้ใช้ แอปพลิเคชันไม่สามารถทำงานระยะยาวในพื้นหลังโดยไม่มีการแจ้งเตือน ซึ่งไม่สามารถยอมรับได้เสมอไปจากมุมมองของ UX นอกจากนี้ ระบบอาจบังคับหยุดแม้แต่ Foreground Service เมื่อเกินขีดจำกัดเวลาสำหรับบางประเภท — ตัวอย่างเช่น dataSync ถูกจำกัดไว้ที่หลายชั่วโมงของการทำงาน

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

JobScheduler คือ API ในตัวของ Android สำหรับกำหนดเวลางาน เหมาะสำหรับการดำเนินการที่สามารถเลื่อนออกไปได้: การซิงค์ผ่าน Wi-Fi การดาวน์โหลดข้อมูลเมื่อเชื่อมต่อกับเครื่องชาร์จ JobScheduler จัดกลุ่มงานเป็นหน้าต่างเพื่อประหยัดแบตเตอรี่ แตกต่างจาก Foreground Service ที่ทำงานอย่างต่อเนื่องโดยไม่คำนึงถึงสถานะ การประหยัดพลังงาน

สำหรับงานสั้น (สูงสุด 10–15 วินาที) คุณสามารถใช้ CoroutineWorker จาก WorkManager โดยมีการดำเนินการที่ล่าช้า หากงานต้องดำเนินการอย่างเคร่งครัดในเวลาที่กำหนด ให้ใช้ AlarmManager ร่วมกับ BroadcastReceiver ดังนั้น Foreground Service จึงเป็นโซลูชันสำหรับการดำเนินการต่อเนื่องระยะยาว ไม่ใช่เครื่องมือสากลสำหรับทุกสถานการณ์พื้นหลัง

  • WorkManager — สำหรับงานที่ถูกเลื่อนออกไปและรับประกันพร้อมการสนับสนุนการรีบูต
  • JobScheduler — สำหรับกำหนดเวลาโดยพิจารณาสถานะเครือข่ายและแบตเตอรี่
  • AlarmManager — สำหรับดำเนินงานในเวลาที่แน่นอน
  • CoroutineWorker — สำหรับการดำเนินการพื้นหลังสั้นพร้อมการสนับสนุน Coroutine

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

Foreground Service ใน Android คืออะไร?

Foreground Service คือบริการ Android ที่มีการแจ้งเตือนถาวรในแถบสถานะซึ่งดำเนินงานระยะยาวที่ผู้ใช้มองเห็นได้ มีลำดับความสำคัญการอยู่รอดสูงและแตกต่างจาก Background Service ตรงที่ไม่ถูกหยุดโดยระบบเมื่อหน่วยความจำไม่เพียงพอ

Foreground Service แตกต่างจาก Background Service อย่างไร?

Foreground Service แสดงการแจ้งเตือนบังคับ ไม่มีข้อจำกัดด้านเวลา และได้รับการปกป้องจากการยุติโดยระบบ Background Service ผู้ใช้มองไม่เห็น ทำงานสูงสุด 10 นาที (API 26+) และสามารถถูกหยุดโดย Low Memory Killer ได้ทุกเมื่อ

มีประเภท Foreground Service อะไรบ้างใน Android 14?

Android 14 กำหนด 9 ประเภท: dataSync, mediaPlayback, location, camera, connectedDevice, phoneCall, microphone, health และ remoteMessaging แต่ละประเภทต้องการสิทธิ์ที่สอดคล้องกันและการประกาศในแมนิเฟสต์ผ่านแอตทริบิวต์ foregroundServiceType

จะเกิดอะไรขึ้นหากไม่เรียก startForeground ทันเวลา?

หากบริการไม่เรียก startForeground() ภายใน 10 วินาทีหลังจากสร้าง (Android 14) ระบบจะส่งข้อยกเว้น ForegroundServiceDidNotStartInTimeException และบังคับหยุดบริการ แอปพลิเคชันจะได้รับ ANR (Application Not Responding) ด้วยหากการดำเนินการทำงานบนเธรดหลัก

สามารถซ่อนการแจ้งเตือนของ Foreground Service ได้หรือไม่?

ไม่ การซ่อนการแจ้งเตือนของ Foreground Service ด้วยโปรแกรมเป็นไปไม่ได้ ตั้งแต่ Android 9 (API 28) เป็นต้นไป การแจ้งเตือนเป็นข้อบังคับและผู้ใช้ไม่สามารถปัดทิ้งได้ วิธีเดียวที่จะลบคือหยุดบริการโดยเรียก stopForeground(REMOVE_NOTIFICATION) และ stopSelf()

สรุป

  • Foreground Service — บริการ Android ที่มีการแจ้งเตือนบังคับในแถบสถานะ
  • ลำดับความสำคัญ — Foreground Service ไม่ถูกระบบฆ่าในทางปฏิบัติ (ADJ 2) แตกต่างจาก Background Service (ADJ 8+)
  • ประเภท — Android 14 ต้องการการประกาศประเภท (dataSync, mediaPlayback, location ฯลฯ) และสิทธิ์ที่สอดคล้องกัน
  • ข้อจำกัด — การเริ่มจากพื้นหลังถูกห้ามใน Android 12+; จำเป็นต้องใช้ FOREGROUND_SERVICE_SPECIAL_USE สำหรับบางสถานการณ์
  • ทางเลือก — WorkManager สำหรับงานที่เลื่อนออกไป JobScheduler สำหรับการกำหนดเวลา AlarmManager สำหรับเวลาที่แน่นอน
  • โค้ด — องค์ประกอบบังคับ: NotificationChannel, startForeground(), foregroundServiceType ในแมนิเฟสต์
  • Google Play — การเผยแพร่แอปพลิเคชันต้องการความสอดคล้องระหว่างประเภทที่ประกาศและการใช้งานบริการจริง

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

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

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

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