JobScheduler: สาระสำคัญ, API และการจัดกำหนดการงาน

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

JobScheduler คือบริการระบบ Android ที่เปิดตัวใน API 21 (Android 5.0 Lollipop) ซึ่งช่วยให้แอปพลิเคชันสามารถจัดกำหนดการทำงานเบื้องหลังตามเงื่อนไขที่กำหนดไว้ แตกต่างจาก AlarmManager ตรงที่ JobScheduler ไม่ต้องการเวลาทำงานที่แน่นอน — ระบบจะกำหนดเวลาที่เหมาะสมที่สุดโดยรวมความต้องการของแอปพลิเคชันเข้ากับสถานะปัจจุบันของอุปกรณ์ ตาม Android Developers, 2026 บริการนี้รองรับเกณฑ์เกี่ยวกับเครือข่าย การชาร์จ สถานะพื้นที่จัดเก็บ และการไม่ได้ใช้งานของอุปกรณ์

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

  • JobScheduler คือ API ระบบ Android 5+ สำหรับการประมวลผลเป็นชุดของงานเบื้องหลังพร้อมเงื่อนไขการเริ่มต้น
  • JobService คือคลาสตัวจัดการพื้นฐานที่ระบบเรียกเมื่อตรงตามเงื่อนไขการทำงาน
  • JobInfo คือออบเจกต์ที่อธิบายพารามิเตอร์ของงาน: ประเภทเครือข่าย ระดับแบตเตอรี่ กำหนดเวลา และความล่าช้า
  • เกณฑ์ รวมถึงการเชื่อมต่อ Wi-Fi การชาร์จ พื้นที่จัดเก็บที่ว่าง และการไม่ได้ใช้งานของอุปกรณ์
  • WorkManager ใช้ JobScheduler ภายในบน Android 5+ โดยมี API ระดับสูงกว่า

JobScheduler คืออะไร?

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

ก่อน JobScheduler นักพัฒนาใช้ AlarmManager และ BroadcastReceiver สำหรับงานเบื้องหลัง ปัญหาของวิธีนี้คือแต่ละแอปปลุกอุปกรณ์อย่างอิสระ ทำให้แบตเตอรี่หมดเร็ว JobScheduler แก้ปัญหานี้โดยแนะนำหน้าต่างการทำงานเป็นชุด ซึ่งระบบจะเริ่มงานที่กำหนดเวลาทั้งหมดของแอปต่าง ๆ พร้อมกัน

หลักการทำงาน ขึ้นอยู่กับออบเจกต์ JobInfo ที่แอปส่งไปยัง JobScheduler ระบบจะบันทึกงานและทำงานเมื่อตรงตามเงื่อนไขที่ระบุทั้งหมด แตกต่างจาก WorkManager ตรงที่ JobScheduler ไม่รับประกันการเริ่มใหม่เมื่อเกิดข้อผิดพลาด — หากงานเกิดข้อยกเว้น นักพัฒนาต้องกำหนดเวลาใหม่ด้วยตนเอง

JobScheduler ทำงานอย่างไร?

JobScheduler ใช้สถาปัตยกรรมที่อิงตาม JobService และ JobInfo JobInfo อธิบายงานและเงื่อนไขของมัน JobService มีตรรกะการทำงาน แอปลงทะเบียนงานผ่าน getSystemService(JobScheduler.class) และเรียก schedule(jobInfo) ระบบจัดการการจัดกำหนดการ

JobService และ JobInfo

JobService คือคลาสนามธรรมที่สืบทอดจาก Service มีสองเมธอดหลัก: onStartJob (เรียกเมื่อเริ่มงาน) และ onStopJob (เรียกเมื่อระบบหยุดงานแบบบังคับ) JobInfo ถูกสร้างผ่าน Builder และประกอบด้วยพารามิเตอร์งานทั้งหมด: ตัวระบุ เงื่อนไข ข้อจำกัดด้านเวลา

java
public class SyncJobService extends JobService {
    @Override
    public boolean onStartJob(JobParameters params) {
        // ทำงานบนเธรดหลัก
        Thread thread = new Thread(() -> {
            performSync();
            jobFinished(params, false);
        });
        thread.start();
        return true; // true = งานดำเนินต่อ
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        return true; // true = กำหนดเวลางานใหม่
    }
}

เกณฑ์การเริ่มงาน

JobScheduler อนุญาตให้ตั้งค่าเกณฑ์หลายอย่างพร้อมกัน: ประเภทเครือข่าย (NETWORK_TYPE_ANY, NOT_ROAMING, UNMETERED), สถานะการชาร์จ (requiresCharging), ระดับแบตเตอรี่ (requiresBatteryNotLow), สถานะพื้นที่จัดเก็บ (requiresStorageNotLow) และโหมดไม่ได้ใช้งาน (requiresDeviceIdle) งานจะทำงานก็ต่อเมื่อตรงตามเกณฑ์ทั้งหมด

พารามิเตอร์ JobInfo

JobInfo.Builder ให้การตั้งค่าที่ยืดหยุ่นสำหรับแต่ละงานเบื้องหลัง การรวมพารามิเตอร์ที่ถูกต้องช่วยให้สมดุลระหว่างความทันเวลาของการทำงานและการใช้พลังงาน

เมธอดคำอธิบายตัวอย่าง
setRequiredNetworkTypeประเภทเครือข่ายที่ต้องการNETWORK_TYPE_UNMETERED
setRequiresChargingอุปกรณ์กำลังชาร์จtrue
setRequiresDeviceIdleอุปกรณ์ไม่ได้ใช้งานtrue
setOverrideDeadlineเวลารอสูงสุด (ms)300000
setMinimumLatencyความล่าช้าขั้นต่ำ (ms)60000
setPeriodicการทำงานเป็นระยะ (ms)3600000
setBackoffCriteriaกลยุทธ์การลองใหม่เมื่อล้มเหลวLINEAR / EXPONENTIAL

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

ตัวอย่างการใช้งาน JobScheduler

การกำหนดเวลางานที่มีหลายเงื่อนไข

สถานการณ์ทั่วไป คือการซิงค์ข้อมูลเมื่อเชื่อมต่อ Wi-Fi และชาร์จอุปกรณ์ แอปสร้าง JobInfo พร้อมเกณฑ์ที่เกี่ยวข้องและส่งไปยัง JobScheduler ระบบจะทำงานเมื่อตรงตามเงื่อนไขที่เหมาะสม

java
ComponentName serviceName = new ComponentName(this, SyncJobService.class);

JobInfo jobInfo = new JobInfo.Builder(JOB_ID_SYNC, serviceName)
    .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
    .setRequiresCharging(true)
    .setRequiresBatteryNotLow(true)
    .setOverrideDeadline(6 * 60 * 60 * 1000) // 6 ชั่วโมง
    .build();

JobScheduler scheduler = (JobScheduler)
    getSystemService(Context.JOB_SCHEDULER_SERVICE);
scheduler.schedule(jobInfo);

การลงทะเบียน JobService ในแมนิเฟสต์

JobService ต้องลงทะเบียนใน AndroidManifest.xml ด้วยสิทธิ์ BIND_JOB_SERVICE ในเมธอด onStartJob สิ่งสำคัญคือต้องเรียก jobFinished หลังจากทำงานเสร็จ — มิฉะนั้นระบบจะถือว่างานกำลังทำงานอย่างไม่มีกำหนดและอาจหยุดมันแบบบังคับ

xml
<service
    android:name=".SyncJobService"
    android:permission="android.permission.BIND_JOB_SERVICE" />

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

JobScheduler มีข้อจำกัดหลายประการ ประการแรก ใช้ได้เฉพาะบน Android 5+ — เวอร์ชันเก่ากว่าต้องใช้ทางเลือกอื่น ประการที่สอง ระบบอาจเลื่อนงานของแอปที่ใช้น้อย โดยเฉพาะบน Android 9+ ที่มี App Standby Buckets ประการที่สาม JobScheduler ไม่มีกลไกการเริ่มใหม่ที่รับประกันเมื่อเกิดข้อผิดพลาด

Google แนะนำให้ใช้ WorkManager แทนการใช้ JobScheduler โดยตรง WorkManager ใช้ JobScheduler ภายในบน Android 5+ แต่เพิ่มการรองรับเวอร์ชันเก่า การรับประกันการทำงาน ลูกโซ่งาน และการสังเกตสถานะผ่าน LiveData หากแอปของคุณรองรับเฉพาะ Android 8+ และไม่ต้องการตรรกะงานเบื้องหลังที่ซับซ้อน JobScheduler ยังคงเป็นตัวเลือกที่สมเหตุสมผล

การตรวจสอบและดีบัก JobScheduler

ในการดีบัก JobScheduler ให้ใช้ dumpsys jobscheduler ผ่าน ADB: คำสั่งแสดงงานที่กำหนดเวลาทั้งหมด สถานะ เวลาที่เหลือ และประวัติการทำงาน สำหรับแอปเฉพาะ: adb shell dumpsys jobscheduler | grep package_name ซึ่งช่วยให้คุณตรวจสอบว่างานได้ลงทะเบียนแล้ว เงื่อนไขใดถูกตั้งไว้ และเหตุใดจึงไม่ทำงาน คุณยังสามารถใช้ JobScheduler.getPendingJob() เพื่อตรวจสอบสถานะงานโดยทางโปรแกรม นอกจากนี้ Android Studio Profiler สามารถใช้วิเคราะห์การใช้พลังงานระหว่างการทำงานของงาน สำหรับแอปบน Android 5+ JobScheduler ยังคงเป็นเครื่องมือที่เชื่อถือได้สำหรับงานเบื้องหลังที่ไม่แม่นยำพร้อมเงื่อนไขเครือข่ายและการชาร์จ

JobScheduler ในสถานการณ์หลายเธรด

โดยค่าเริ่มต้น JobService ทำงานบนเธรดหลัก ดังนั้นการดำเนินการที่บล็อกทั้งหมดจำเป็นต้องสร้างเธรดแยกหรือใช้ AsyncTask แตกต่างจาก WorkManager ตรงที่ JobScheduler ไม่มีพูลเธรดในตัว นักพัฒนาจัดการเธรดและการซิงค์อย่างอิสระ ขอแนะนำให้ใช้ ThreadPoolExecutor สำหรับงานแบบขนานและ Handler สำหรับการสื่อสารกับเธรดหลัก ใน onStopJob สิ่งสำคัญคือต้องขัดจังหวะเธรดที่ทำงานอยู่อย่างถูกต้องเพื่อป้องกันการรั่วไหล

งานเป็นระยะผ่าน JobScheduler

JobScheduler รองรับงานเป็นระยะผ่านเมธอด setPeriodic(long intervalMillis) ช่วงเวลาขั้นต่ำคือ 15 นาที อย่างไรก็ตาม แตกต่างจาก WorkManager JobScheduler ไม่รับประกันการปฏิบัติตามช่วงเวลาที่แน่นอน — ระบบอาจเลื่อนการทำงานเพื่อรวมเป็นชุดกับงานอื่น ๆ เมธอด setPeriodic ยังไม่รองรับช่วงเวลาที่ยืดหยุ่น (หน้าต่างยืดหยุ่น) ซึ่งปรากฏใน API เวอร์ชันหลัง สำหรับการทำงานเป็นระยะที่แม่นยำ ให้ใช้ AlarmManager ร่วมกับ BroadcastReceiver

App Standby Buckets และผลกระทบต่อ JobScheduler

ตั้งแต่ Android 9 เป็นต้นไป Google ได้แนะนำ App Standby Buckets ซึ่งจัดหมวดหมู่แอปตามความถี่ในการใช้งาน: Active, Working Set, Frequent, Rare แอปในหมวด Rare จะพบความล่าช้าในการทำงานของ JobScheduler สูงถึง 24 ชั่วโมง นักพัฒนาสามารถมีอิทธิพลต่อหมวดหมู่ได้ผ่านคุณภาพของแอปเท่านั้น — กลไกระบบจะเพิ่มลำดับความสำคัญของแอปที่ผู้ใช้โต้ตอบเป็นประจำโดยอัตโนมัติ JobScheduler พิจารณาการจัดหมวดหมู่นี้ และงานจากแอป Rare จะทำงานเฉพาะในหน้าต่างบำรุงรักษาเท่านั้น สำหรับแอปในหมวด Active (ที่ใช้บ่อยที่สุด) ความล่าช้าน้อยมาก และงานจะทำงานเกือบจะทันทีเมื่อตรงตามเงื่อนไข

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

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

จริงหรือไม่ที่ JobScheduler รวมงานจากแอปต่าง ๆ เข้าด้วยกัน?

ใช่ JobScheduler จัดกลุ่มงานจากแอปต่าง ๆ เป็นชุดและทำงานร่วมกัน นี่คือข้อได้เปรียบหลักเหนือ AlarmManager: แทนที่แต่ละแอปจะปลุกอุปกรณ์แยกกัน ระบบจะปลุกโปรเซสเซอร์ครั้งเดียวและประมวลผลงานที่กำหนดเวลาทั้งหมด

จะเกิดอะไรขึ้นหากงานใน JobService ทำงานนานกว่าที่กำหนด?

หากไม่ได้เรียก jobFinished ภายในเวลาที่เหมาะสม ระบบอาจเรียก onStopJob แบบบังคับและยุติงาน ขอแนะนำให้ทำงานเดียวให้เสร็จภายในไม่กี่นาทีและเรียก jobFinished ทุกครั้งเมื่อเสร็จสิ้น

JobScheduler มีพฤติกรรมอย่างไรในโหมด Doze?

ใน Doze Mode JobScheduler จะเลื่อนงานทั้งหมดออกไปจนถึงหน้าต่างบำรุงรักษาครั้งถัดไป ซึ่งเกิดขึ้นเป็นระยะ การใช้ setOverrideDeadline รับประกันว่างานจะทำงานโดยพิจารณาหน้าต่างเหล่านี้ แต่ไม่จำเป็นต้องเป็นเวลาที่แน่นอน

JobScheduler แตกต่างจาก WorkManager อย่างไร?

WorkManager คือไลบรารีที่ใช้ JobScheduler ภายในบน Android 5+ WorkManager เพิ่มการรับประกันการทำงาน การรองรับเวอร์ชันเก่า (API 14+) ลูกโซ่ Worker การสังเกตสถานะผ่าน LiveData/Flow และการลองใหม่โดยอัตโนมัติเมื่อล้มเหลว

จะยกเลิกงานที่กำหนดเวลาใน JobScheduler ได้อย่างไร?

ในการยกเลิก ใช้ scheduler.cancel(JOB_ID) สำหรับงานเฉพาะ หรือ scheduler.cancelAll() สำหรับงานทั้งหมดของแอป ตรวจสอบให้แน่ใจว่า ID งานตรงกับที่ระบุเมื่อสร้าง JobInfo มิฉะนั้นงานจะไม่ถูกยกเลิก

นักพัฒนาควรเข้าใจว่า JobScheduler เป็น API ระบบระดับต่ำที่ออกแบบมาสำหรับทีมที่มีประสบการณ์ซึ่งต้องการควบคุมงานเบื้องหลังบนอุปกรณ์อย่างเต็มที่ สำหรับแอปพลิเคชันส่วนใหญ่ WorkManager มีฟังก์ชันการทำงานเดียวกันกับ API ที่ง่ายกว่า ปลอดภัยกว่า และทันสมัยกว่าสำหรับ Android

สรุป

  • JobScheduler คือบริการระบบ Android 5+ สำหรับการทำงานเป็นชุดของงานเบื้องหลังพร้อมเงื่อนไขที่กำหนด
  • สถาปัตยกรรม สร้างขึ้นรอบ JobService (ตรรกะ) และ JobInfo (พารามิเตอร์) ลงทะเบียนผ่าน AndroidManifest
  • เกณฑ์การเริ่มต้น รวมถึงเครือข่าย การชาร์จ สถานะพื้นที่จัดเก็บ และการไม่ได้ใช้งานของอุปกรณ์
  • setOverrideDeadline เป็นวิธีเดียวที่จะรับประกันการทำงานของงานภายในเวลาที่กำหนด
  • การทำงานเป็นชุด รวมงานจากแอปต่าง ๆ ลดการใช้พลังงานโดยรวมของอุปกรณ์
  • WorkManager เป็นทางเลือกที่ต้องการพร้อมการรับประกันการทำงานและการรองรับ Android เวอร์ชันเก่า
  • อย่าใช้ JobScheduler สำหรับงานที่ต้องการเวลาแน่นอน — ให้ใช้ AlarmManager แทน

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

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

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

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