PracticU

ביטול משימה אסינכרונית

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › ביטול משימה אסינכרונית
מילון מושגים:
אסינכרוני - אופן פעולה שבו פעולה ארוכה רצה ברקע והתוכנית ממשיכה בלי להמתין לה, ומטופלת כשתסתיים.
כפתור - רכיב בממשק המשתמש שהמשתמש לוחץ עליו כדי להפעיל פעולה, כמו שליחת טופס או מעבר לדף אחר.
אובייקט - יחידה בתכנות מונחה עצמים שמאגדת נתונים (תכונות) ופעולות (מתודות). נוצר בדרך כלל ממחלקה המשמשת כתבנית.
לולאה - מבנה בקרה שחוזר על קטע קוד שוב ושוב כל עוד תנאי מתקיים או עבור כל פריט באוסף.
ממשק - נקודת מגע בין רכיבים: ממשק משתמש שבו אדם מפעיל תוכנה, או ממשק תכנותי שמגדיר אילו פעולות רכיב אחד חושף לאחר.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.
Activity - ב-Android, רכיב שמייצג מסך יחיד של האפליקציה שאיתו המשתמש מתקשר.

ביטול משימה אסינכרונית
מוסיפים כפתור Stop שמאפשר למשתמש לעצור AsyncTask שכבר רץ, ולקבל את מה שחושב עד לאותו רגע.
השלבים העיקריים
1. כפתור: מוסיפים כפתור Stop מתחת ל-ProgressBar. כדי לקרוא ממנו לביטול, מעבירים את אובייקט ה-PrimesFinder לשדה גלובלי.
2. בקשת ביטול: בכפתור קוראים ל-primesFinder.cancel(true).
3. הבדיקה בלולאה: הקריאה ל-cancel רק מדווחת שמישהו ביקש להפסיק ולא עוצרת את הפעילות בעצמה. לכן בתוך doInBackground בודקים isCancelled(), ואם ביקשו ביטול יוצאים מהלולאה ומחזירים את המספרים שנמצאו עד עכשיו.
4. דיווח על הביטול: מוסיפים לממשק פונקציה onCanceled(String primes). דורסים ב-AsyncTask את onCancelled עם התוצאה, וקוראים מתוכה ל-listener.
5. ב-Activity: מממשים את onCanceled ומציגים את התוצאה החלקית. את האחוז לא מגדירים ל-100, כי העבודה לא הושלמה.
6. בדיקה: בטווח מיליון עד שני מיליון לוחצים Stop בערך ב-80%. התהליך נעצר באמצע ומוצגים הראשוניים שנמצאו עד אז.
סיכום
AsyncTask מריץ עבודה בתרד נפרד ומאפשר לעדכן את ה-UI בכמה שלבים: לפני ההתחלה, תוך כדי עם אחוז, בסוף עם תוצאה וגם בביטול. זה בסיס לעבודה הבאה עם האינטרנט, שבה מביאים מידע ומעדכנים את המסך.

פרקי ההרצאה: ביטול משימה אסינכרונית

  1. 00:00

    הוספת לחצן Stop לביטול

  2. 00:50

    קריאה לפונקציה cancel

  3. 01:49

    בדיקת isCancelled ויציאה מהלולאה

  4. 02:30

    דיווח ביטול עם onCancelled

  5. 03:56

    בדיקת עצירה באמצע החישוב

  6. 04:35

    סיכום היכולות של AsyncTask

תמלול ההרצאה: ביטול משימה אסינכרונית

הטקסט המלא של הדקות הראשונות בהרצאה «ביטול משימה אסינכרונית» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:07

    מה שנשארנו לראות בנוגע לאסינג טאסק זה איך המשתמש יכול לבצע קאנסל עבור האסינג טאסק. בואו ניקח לחצן ונאפשר למשתמש ללחוץ עליו בכדי לבצע קאנסל של כל הסיפור הזה. נגדיר את הלחצן הזה כאן מתחת לפרוגרס בר מעל כל הסיפור הזה ונקרא לו, נגדיר שהוא פשוט יחיל קאנסל או סטופ.

  2. 00:38

    בוא נגיד ככה, נגיד אותו כButtonStop, שהוא יעצור את כל התהליך, בואו ניגש לקוד שלו, וכל מה שאנחנו צריכים לבצע בקוד זה לקרוא לפונקציית Cancellation כלשהי, והפונקציה הזאת נמצאת בתוך אובייקט הפריימס, פיינדר, ולכן אנחנו נאלצים להעלות אותו לאזור הגלובלי.

  3. 01:06

    בואו נגדיר פה Private, Primes Finder, נפטר מזה שהוא לא יהיה לוקלי, שיהיה גלובלי, וניגש לפונקציית Stop, Rhymes Finder, ויש לנו פה פונקציית Cancel. אנחנו צריכים להגדיר True, בכדי לגרום לפונקציה לעבוד, אפילו שהוא נמצא בתהליך, באמצע התהליך.

  4. 01:36

    בואו רגע נעלה את זה לכאן, שיהיה ביחד עם כל הלחצנים. ועכשיו הדבר הזה לא באמת מפסיק את התהליך. מה זאת אומרת? כל מה שעשינו זה אמרנו שאנחנו מעוניינים לבצע cancellation.

  5. 01:52

    מה שאנחנו צריכים לעשות זה לבדוק בתהליך הפעילות שמתרחשת מאחורי הקלעים, האם מבחוץ ביקשו cancellation, ואם כן לבצע הפסקה יזומה של הפעילות. עוד פעם, ברגע שקראנו לפונציית cancel זה לא מפסיק את הפעילות, זה רק מדווח שמישהו ביקש להפסיק.

  6. 02:15

    ואז אנחנו צריכים לבדוק כאן isCanceled, האם מישהו ביקש להפסיק, אז אנחנו רוצים לצאת מהלולאה וזה מה שיגרום להפסקה, כי אנחנו כן צריכים להחזיר משהו. אז בואו נחזיר את המספרים שמצאנו עד עכשיו.

  7. 02:34

    עכשיו כדאי לנו מאוד לדווח שבעצם הפעילות הפסיקה כתוצאה מקאנסל, ואת זה נעשה על ידי פונקציה נוספת בתוך האינטרפייס, נקרא לה onCanceled, ונדווח גם בפונקציה הזאת את הפריים, דיר פה string primes, ואנחנו רוצים לדרוס פונקציה שנקראת onCanceled, שמקבלת את הריזולט, ומה שאנחנו רוצים לעשות בפונקציה זה לדווח שבעצם הפעילות הופסקה,

  8. 03:12

    בואו ניקח כאן את ה-Result, ונשלח את ה-Result, ואז אנחנו צריכים לממש את הפונקציה האחרונה, onCanceled, אופה, לחצתי בטעות, על Cancel, כלומר Cancel ולוחץ על Cancel.

  9. 03:33

    והנה כאן אנחנו יכולים להתחיל לבצע פה פעולות סיום. מה אנחנו רוצים לעשות? אז את האחוז, אין לנו מה להגדיר שזה 100%, כי לא סיימנו את המאה אחוז, אבל בואו כן נציג את זה, נציג את התוצאה שהגענו אליה עד עכשיו.

  10. 03:56

    בואו נבדוק, בואו נכניס שוב פעם מספרים גדולים, מיליון, נכניס שתי מיליון, נפטר מהמקלדת, נתחיל להריץ, ובאזור 80% נלחץ על סטופ ואנחנו רואים שהמערכת הפסיקה באמצע, דיווחה לנו את מה שהיא דיווחה לנו, יש לנו פה את כל המספרים הראשונים שנמצאו עד שלחצנו על סטופ, והכל עובד כמו שצריך עם האפשרות של

  11. 04:31

    היוזר לבצע הפסקה באמצע של התהליך. אז ראינו כאן איך אנחנו משתמשים באסינג טאסק בכדי לבצע פעילות מאחורי הקלעים וכך ה-UI משוחרר, הפעילות מתבצעת בטרד נפרד מהתרד של ה-UI.

  12. 04:47

    ואנחנו גם יכולים להדכן את ה-UI בכל מיני שלבים באמצע, בין אם זה בסוף עם תוצאה סופית, בין אם זה בהתחלה לפני שאנחנו מתחילים, תוך כדי התהליך, כמה אחוז יסתיים וגם אם אנחנו

לקורס המלא: קורס פיתוח אפליקציות לאנדרואיד

ההרצאה הקודמת: דיווח על פעילות - Report Progress

ההרצאה הבאה: הורדה פשוטה - Download

הרצאות קשורות מקורסים אחרים

  • משימה מתוזמנת - Scheduled Task
  • עבודה עם GCD - עבודה אסינכרונית ב-Xcode
  • קריאה וכתיבה אסינכרונית לקובץ ב-NodeJS
  • הגדרת תקן לסיום משימה בצוות בדיקות

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון