תזמון משימות באמצעות WorkManager חלק מ-Android Jetpack.
WorkManager הוא הפתרון המומלץ לעבודה מתמשכת. העבודה נמשכת גם אחרי הפעלות מחדש של האפליקציה והפעלות מחדש של המערכת. רוב העיבוד ברקע מתבצע בצורה הטובה ביותר באמצעות משימות מתמשכות, ולכן WorkManager הוא ה-API המומלץ העיקרי לעיבוד ברקע.
סוגי עבודה מתמשכת
WorkManager מטפל בשלושה סוגים של משימות מתמשכות:
- מיידי: משימות שצריך להתחיל מיד ולהשלים בקרוב. יכול להיות שהטיפול יהיה מהיר יותר.
- Long Running: משימות שעשויות להימשך זמן רב יותר, אולי יותר מ-10 דקות.
- ניתנות לדחייה: משימות מתוזמנות שמתחילות במועד מאוחר יותר ויכולות לפעול באופן קבוע.
באיור 1 מוסבר איך הסוגים השונים של עבודה מתמשכת קשורים זה לזה.
באופן דומה, בטבלה הבאה מפורטים הסוגים השונים של עבודות.
סוג השידור | תדירות | איך ניגשים |
---|---|---|
מיידי | פעם אחת | OneTimeWorkRequest וגם Worker
לטיפול מהיר יותר, אפשר להתקשר למספר |
Long Running | חד-פעמית או תקופתית | כל ערך של WorkRequest או Worker . קוראים ל-setForeground() ב-Worker כדי לטפל בהתראה.
|
ניתן לדחות | חד-פעמית או תקופתית | PeriodicWorkRequest וגם Worker
|
מידע נוסף על הגדרת WorkManager זמין במדריך הגדרת בקשות Work.
תכונות
בנוסף לממשק API פשוט ועקבי יותר, ל-WorkManager יש כמה יתרונות מרכזיים נוספים:
אילוצים בעבודה
הגדרה אופרטיבית של התנאים האופטימליים להרצת העבודה באמצעות אילוצים על עבודה. לדוגמה, אפשר להפעיל את השירות רק כשהמכשיר מחובר לרשת ללא חיוב לפי שימוש, כשהמכשיר לא פעיל או כשיש מספיק טעינה בסוללה.
תזמון יעיל
באמצעות WorkManager אפשר לתזמן משימות כך שיפעלו פעם אחת או באופן חוזר באמצעות חלונות תזמון גמישים. אפשר גם לתייג ולתת שמות לעבודות, כדי לתזמן עבודות ייחודיות שאפשר להחליף, ולעקוב אחרי קבוצות של עבודות או לבטל אותן ביחד.
משימות מתוזמנות מאוחסנות במסד נתונים של SQLite שמנוהל באופן פנימי, ו-WorkManager מוודא שהמשימות האלה נשמרות ומתוזמנות מחדש אחרי הפעלות מחדש של המכשיר.
בנוסף, WorkManager פועל בהתאם לשיטות מומלצות ולתכונות לחיסכון באנרגיה, כמו מצב שינה, כך שאתם לא צריכים לדאוג.
עבודה מהירה
אפשר להשתמש ב-WorkManager כדי לתזמן משימות מיידיות לביצוע ברקע. כדאי להשתמש בעבודה מהירה למשימות שחשובות למשתמש וניתן להשלים אותן תוך כמה דקות.
מדיניות גמישה של ניסיונות חוזרים
לפעמים העבודה נכשלת. ב-WorkManager יש מדיניות גמישה של ניסיונות חוזרים, כולל מדיניות השהיה מעריכית שניתן להגדיר.
קישור משימות
לעבודות מורכבות שקשורות זו לזו, אפשר לקשר יחד משימות עבודה נפרדות באמצעות ממשק אינטואיטיבי שמאפשר לקבוע אילו משימות יפעלו ברצף ואילו יפעלו במקביל.
Kotlin
val continuation = WorkManager.getInstance(context) .beginUniqueWork( Constants.IMAGE_MANIPULATION_WORK_NAME, ExistingWorkPolicy.REPLACE, OneTimeWorkRequest.from(CleanupWorker::class.java) ).then(OneTimeWorkRequest.from(WaterColorFilterWorker::class.java)) .then(OneTimeWorkRequest.from(GrayScaleFilterWorker::class.java)) .then(OneTimeWorkRequest.from(BlurEffectFilterWorker::class.java)) .then( if (save) { workRequest<SaveImageToGalleryWorker>(tag = Constants.TAG_OUTPUT) } else /* upload */ { workRequest<UploadWorker>(tag = Constants.TAG_OUTPUT) } )
Java
WorkManager.getInstance(...) .beginWith(Arrays.asList(workA, workB)) .then(workC) .enqueue();
לכל משימה בעבודה אפשר להגדיר נתוני קלט ופלט. כשמקשרים משימות, מערכת WorkManager מעבירה באופן אוטומטי את נתוני הפלט ממשימת עבודה אחת למשימה הבאה.
יכולת פעולה הדדית מובנית של שרשור
WorkManager משתלב בצורה חלקה עם Coroutines ו-RxJava, ומספק את הגמישות הנדרשת כדי לשלב ממשקי API אסינכררוניים משלכם.
שימוש ב-WorkManager לביצוע משימות בצורה מהימנה
WorkManager מיועד לעבודה שצריכה להימשך באופן מהימן גם אם המשתמש יוצא מהמסך, האפליקציה יוצאת או המכשיר מופעל מחדש. לדוגמה:
- שליחת יומנים או ניתוח נתונים לשירותים לקצה העורפי.
- סנכרון תקופתי של נתוני האפליקציה עם שרת.
WorkManager לא מיועד לעבודה ברקע בתהליך שאפשר לסיים אותה בבטחה אם תהליך האפליקציה מסתיים. הוא גם לא פתרון כללי לכל העבודה שדורשת ביצוע מיידי. מומלץ לעיין במדריך לעיבוד ברקע כדי לבדוק איזה פתרון מתאים לצרכים שלכם.
הקשר לממשקי API אחרים
פונקציות רפיטיביות הן הפתרון המומלץ לתרחישי שימוש מסוימים, אבל לא כדאי להשתמש בהן לעבודה מתמשכת. חשוב לציין ש-coroutines היא מסגרת למימוש בו-זמניות, ואילו WorkManager היא ספרייה לעבודה מתמשכת. באופן דומה, צריך להשתמש ב-AlarmManager לשעונים או ליומני אירועים בלבד.
API | מומלץ ל | הקשר ל-WorkManager |
---|---|---|
פונקציות רפיטיביות | כל עבודה אסינכררונית שלא צריכה להיות מתמשכת. | קורוטינים הם הדרך הרגילה לעזוב את ה-thread הראשי ב-Kotlin. עם זאת, הם יוצאים מהזיכרון כשהאפליקציה נסגרת. לעבודה מתמשכת, השתמשו ב-WorkManager. |
AlarmManager | התראות בלבד. | בניגוד ל-WorkManager, AlarmManager מעיר את המכשיר ממצב נמנום. לכן, היא לא יעילה מבחינת ניהול צריכת החשמל והמשאבים. מומלץ להשתמש בו רק להתרעות או להתראות מדויקות, כמו אירועים ביומן – ולא לעבודה ברקע. |
החלפת ממשקי API שהוצאו משימוש
WorkManager API הוא החלופה המומלצת לכל ממשקי ה-API הקודמים של תזמון ברקע ב-Android, כולל FirebaseJobDispatcher, GcmNetworkManager ו-Job Scheduler.
תחילת העבודה
כדי להתחיל להשתמש ב-WorkManager באפליקציה, כדאי לעיין במדריך לתחילת העבודה.
מקורות מידע נוספים
מידע נוסף על WorkManager
זמין במקורות המידע הבאים.
דוגמיות
סרטונים
- Workmanager – MAD Skills, סדרת סרטונים
- עבודה עם WorkManager, מתוך Android Dev Summit 2018
- WorkManager: מעבר ליסודות, מתוך Android Dev Summit 2019
בלוגים
מומלץ עבורך
- הערה: טקסט הקישור מוצג כש-JavaScript מושבת
- הפעלת אפליקציה