ה-API של אנדרואיד ללוגיקה אסינכרונית, AsyncTask, בדרך החוצה. על פי התחייבות של AOSP, ה-API ייצא משימוש באנדרואיד 11.
כבר שנים, AsyncTask של אנדרואיד הוא כלי עיקרי עבור מפתחים מתחילים ומומחים כאחד. אם אי פעם חיפשת בגוגל מדריך עבור כל סוג של היגיון אסינכרוני באנדרואיד, רוב הסיכויים שהתוצאות הראשונות מצביעות על שימוש ב-AsyncTask. זה גם לא שזאת בחירה אקראית. AsyncTask נוצר במקור כדי לפשט את האינטראקציה בין פעולות רקע לממשק המשתמש של אפליקציה. לזמן מה זה עשה את זה טוב. AsyncTask באמת עוזר לפשט משימות אסינכרוניות. אבל זה לא אומר שזה מושלם.
דבר אחד שהרבה יישומים צריכים לעשות הוא לתפוס מידע משרת מרוחק. מכיוון שבקשות רשת יכולות להימשך זמן מה, בדרך כלל חשוב לבצע אותן באופן אסינכרוני כדי שלא יגרמו לאפליקציה לקפוא. לאחר השלמת הפעולה, ניתן לעדכן את ממשק המשתמש. עם זאת, ייתכן שעד שבקשת הרשת תסתיים, החלק הרלוונטי של ממשק המשתמש כבר לא קיים, מה שעלול לגרום לקריסות או באגים אחרים. בעוד AsyncTask עושה את התהליך הכולל פשוט יותר, זה לא מכבד את מחזור החיים של האפליקציה של אנדרואיד. זה אומר שאין הגנה מובנית מפני גימור AsyncTask לאחר שינוי ממשק המשתמש. כמובן, אפשר להוסיף ידנית צ'קים והגנות אחרות, אבל זה מוסיף הרבה קוד חוזר (AKA boilerplate). בגלל בעיות כאלה, AsyncTask קצת ירד מהדרך. גוגל גם לא ביצעה שינויים רבים באופן שבו זה עובד.
ובכן, נראה שדעתה של גוגל היא ש-AsyncTask הוא מעבר לחיסכון. בהתחייבות של AOSP לאחרונה, AsyncTask הוצא משימוש, תוך ציון סיבות דומות לאלו שדיברתי עליהם זה עתה. למרות שזה לא באמת שינוי עצום עבור משתמשי קצה, זה יכול להיות בעל משמעות רבה עבור מפתחים. אם אתה שומר על בסיס קוד ישן יותר או שאתה רק מתחיל עם משימות אסינכרוניות באנדרואיד, סביר להניח שתצטרך לשנות חבורה של קוד. למרבה המזל, גוגל לא השאירה מפתחים באבק.
בגלל המגבלות של AsyncTask, חלופות צצו עם הזמן, כמו RxJava ו-Kotlin החדשה (ish) Coroutines הספרייה. חלופות אלה נוטות להיות בעלות גמישות ותכונות הרבה יותר מאשר AsyncTask, כך שהן צברו לא מעט פופולריות. בהודעת ההוצאה משימוש עבור AsyncTask, גוגל ממליצה להשתמש במסגרת Concurrency של Java או ב-Kotlin Coroutines.
אישית, כבר התחלתי להשתמש ב-Cotlin's Coroutines, ולא הסתכלתי אחורה. כמובן, אני יודע שאנשים רבים שילבו את הקוד שלהם בצורה הדוקה סביב AsyncTask, אז כנראה שזו לפחות אי נוחות קלה עבורם. זה דבר טוב שיש הרבה אלטרנטיבות לבחירה. זה יכול להיות מעצבן לשנות את הקוד שלך, אבל לפחות זה אפשרי הפעם.
אם אתה רוצה פרטים נוספים, אתה יכול לבדוק את ההתחייבות כאן. ההתחייבות מוזגה מוקדם יותר היום, אלא אם כן תהיה מהדורת תחזוקה של אנדרואיד בצנרת, נראה את השינוי הזה בא לידי ביטוי באנדרואיד 11 בשנה הבאה.