עבודה מתמידה חלק מ-Android Jetpack.
העבודה קבועה כל עוד היא מתוזמנת להתבצע דרך הפעלה מחדש של האפליקציה ומערכת מופעלת מחדש. WorkManager הוא הפתרון המומלץ לעבודה מתמידה. מכיוון שרוב העיבוד ברקע מתבצע בצורה הטובה ביותר באמצעות עבודה מתמידה, לכן, WorkManager הוא גם ה-API הראשי המומלץ ברקע באופן כללי.
סוגים של עבודה מתמידה
WorkManager מטפל בשלושה סוגים של עבודה מתמידה:
- באופן מיידי: משימות שחייבות להתחיל מיד ולהשלים בקרוב. יכול להיות הוא מהיר.
- הרצה ארוכה: משימות שעשויות להימשך זמן רב יותר, ועשויה להימשך זמן רב יותר 10 דקות.
- דחייה: משימות מתוזמנות שמתחילות במועד מאוחר יותר ויכולות לפעול. מדי פעם.
איור 1 מתאר את הקשר בין הסוגים השונים של עבודה מתמידה אחר.
באופן דומה, גם הטבלה הבאה מפרטת את סוגי העבודה השונים.
סוג | תקופתיות | איך למצוא את הכתובת |
---|---|---|
מיידי | פעם אחת | OneTimeWorkRequest וגם Worker לעבודה מזורזת, אפשר להתקשר למספר setExpedited() ב-OneTimeWorkRequest. |
ריצה ארוכה | פעם אחת או באופן תקופתי | כל WorkRequest או Worker . יש להתקשר אל setForeground() ב-Worker כדי לטפל בהתראה. |
לעיכוב | פעם אחת או באופן תקופתי | PeriodicWorkRequest וגם Worker |
למידע נוסף על אופן ההגדרה של WorkManager, ניתן לעיין במאמר הגדרת מדריך WorkRequests.
התכונות של WorkManager
ב-WorkManager מספק ממשק API פשוט ועקבי יותר מספר יתרונות עיקריים נוספים:
מגבלות עבודה
הגדרה הצהרתית של התנאים האופטימליים להפעלת העבודה באמצעות סביבת עבודה מגבלות. לדוגמה, הפעל רק כשהמכשיר נמצא במצב גישה ללא שימוש בנתונים הרשת הזו, כשהמכשיר לא פעיל או כשרמת הטעינה של הסוללה מספיקה.
תזמון מתקדם
ב-WorkManager אפשר לתזמן את העבודה כך שיפעל פעם אחת, או חוזרים על שימוש בחלונות לתזמון גמיש. אפשר לתייג עבודה ולתת שם וכך גם לתזמן עבודה ייחודית וניתנת להחלפה, ולעקוב אחר עבודה או לבטל בקבוצות של עבודה משותפת.
העבודה המתוזמנת מאוחסנת במסד נתונים של SQLite שמנוהל באופן פנימי, ב-WorkManager מוודא שהעבודה הזו נמשכת ושהמועד שלה משתנה בכל הפעלות מחדש של המכשירים.
בנוסף, WorkManager פועל לפי תכונות ושיטות מומלצות לחיסכון באנרגיה כמו מצב 'נמנום', כך שאין צורך לדאוג.
עבודה מזורזת
אפשר להשתמש ב-WorkManager כדי לתזמן עבודה מיידית לביצוע רקע. כדאי להשתמש בעבודה מזורזת למשימות שחשובות לכם. של המשתמש. התהליך יסתיים תוך מספר דקות.
מדיניות גמישה של ניסיונות חוזרים
לפעמים העבודה נכשלת. ב-WorkManager יש מדיניות גמישה בנושא ניסיונות חוזרים, כולל מדיניות של השהיה מעריכית לפני ניסיון חוזר (exponential backoff) להגדרה.
שרשראות עבודה
בעבודה מורכבת, אפשר לשרשר יחד משימות עבודה נפרדות באמצעות ממשק אינטואיטיבי שמאפשר לך לקבוע אילו חלקים יפעלו ברצף שפועלים במקביל.
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 כדי לעבוד בצורה מהימנה
Work Manager מיועד לעבודה שנדרשת לפעילות אמינה גם אם המשתמש מנווט למסך, מהאפליקציה לצאת או שהמכשיר מופעל מחדש. עבור דוגמה:
- שליחת יומנים או ניתוח נתונים לשירותים לקצה העורפי.
- סנכרון תקופתי של נתוני אפליקציות עם שרת.
WorkManager לא מיועד לעבודה ברקע בתהליך שניתן לבצע בצורה בטוחה יופסק אם תהליך האפליקציה יופסק. זה גם לא פתרון כללי כל העבודה שמחייבת ביצוע מיידי. מומלץ לבדוק את הרקע לעיבוד התוצאות כדי לראות איזה פתרון עונה על הצרכים שלכם.
הקשר לממשקי API אחרים
קורוטינים הם הפתרון המומלץ למקרים מסוימים, אבל לא להשתמש בהם לעבודה מתמידה. חשוב לציין שקורוטינים היא מסגרת בו-זמניות (concurrency), ואילו WorkManager היא ספרייה של בעבודה. באופן דומה, עליך להשתמש ב-AlertManager לשעונים או ליומנים בלבד.
API | מומלץ עבור | הקשר אל WorkManager |
---|---|---|
קורוטין | כל עבודה אסינכרונית שלא חייבת להיות שוטפת. | קורוטינים הם האמצעים הרגילים לעזיבת ה-thread הראשי ב-Kotlin. עם זאת, הם משאירים זיכרון כשהאפליקציה נסגרת. כדי לעבוד באופן קבוע, כדאי להשתמש ב-WorkManager. |
AlertManager | התראות בלבד. | בניגוד ל-WorkManager, AlertManager מוציא מכשיר ממצב 'נמנום'. לכן הוא לא יעיל מבחינת אספקת החשמל וניהול המשאבים. יש להשתמש בה רק להתראות או להתראות מדויקות כמו אירועים ביומן — ולא לעבודה ברקע. |
החלפת ממשקי API שהוצאו משימוש
WorkManager API הוא התחליף המומלץ לכל גרסה קודמת של Android.
ממשקי API לתזמון ברקע, כולל FirebaseJobDispatcher
,
GcmNetworkManager
וJobScheduler
.
שנתחיל?
מומלץ לעיין במדריך לתחילת העבודה כדי להתחיל להשתמש ב-WorkManager אפליקציה.
מקורות מידע נוספים
בקטעים הבאים תמצאו מקורות מידע נוספים.
סרטונים
- Workmanager – MAD Skills, סדרת סרטונים
- עבודה עם WorkManager, מכנס המפתחים של Android לשנת 2018
- WorkManager: מחוץ לעקרונות הבסיסיים, מתוך גרסת הפיתוח של Android לשנת 2019 פסגה