PracticU

The Activity State Problem

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

The Activity State Problem
למה שינוי כיוון המכשיר גורם להעלמת שינויים שהמשתמש עשה במסך? השיעור מסביר את בעיית ה-State של האקטיביטי, מדגים אותה ומכין לפתרונות בשיעורים הבאים.
איך זה עובד
1. מה זה State: זה המידע שקיים ברמת האקטיביטי ושיכול להשתנות בזמן שהמשתמש עובד איתה, למשל צבע טקסט או ערכי Data Member.
2. למה הוא נעלם: יש מחלקה אחת ושני layout (פורטרייט ולנדסקייפ). כדי להציג מחדש את ה-layout המתאים, אנדרואיד הורסת את אובייקט האקטיביטי ויוצרת אותו מחדש, ומריצה שוב אירועים כמו onCreate.
3. הדגמה: ל-TextView של הגולדפיש נותנים id ואירוע onClick שצובע אותו בכחול בעזרת setTextColor. את ה-id וה-onClick מעתיקים לשני ה-layout, כך שהקוד עובד בשניהם.
4. התוצאה: אחרי לחיצה הטקסט כחול, אבל בסיבוב המסך (Ctrl-F12 באמולטור, וסיבוב פיזי במכשיר) הכחול נעלם וחוזר לאפור, ובחזרה לפורטרייט הוא לא חוזר.
5. הוכחה ל-onCreate: הצגת Toast בתוך onCreate מראה שהוא מורץ בכל שינוי כיוון, כלומר האובייקט הקודם נהרס ונוצר חדש.
6. מה נאבד: גם שינויים ב-layout וגם ערכי Data Member נעלמים, כי המשתנים נוצרים מחדש.
שימו לב
לא הגיוני שהמשתמש יאבד את הנתונים רק כי סובב את המכשיר, ולכן צריך לטפל בבעיה. המרצה מציג שלוש שיטות בשיעורים הבאים, ומתחיל במצב שבו יש layout אחד בלבד.
אחרי השיעור אפשר להסביר למה State של אקטיביטי הולך לאיבוד בסיבוב המסך ולזהות זאת בעזרת onCreate.
השיעור הבא בקורס: Cancel Activity Recreation

פרקי ההרצאה: The Activity State Problem

  1. 00:00

    בעיית ה-State בשינוי אוריינטציה

  2. 00:40

    Activity אחת ושני Layouts

  3. 01:17

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

  4. 02:01

    דוגמה לצביעת טקסט בלחיצה

  5. 03:29

    העתקת השינויים לשני ה-Layouts

  6. 04:11

    הצבע נעלם בסיבוב המכשיר

  7. 05:13

    מהו ה-State של האקטיביטי

תמלול ההרצאה: The Activity State Problem

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

  1. 00:02

    לפיתוח אפליקציה באנדרואיד קיימת בעיה שדורשת את ההתייחסות שלנו בתור מפתחי האפליקציה, והבעיה הזאת קשורה ל-State של ה-Activity ולאוריינטציה של המכשיר, או ליתר דיוק שינוי האוריינטציה של המכשיר.

  2. 00:19

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

  3. 00:55

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

  4. 01:14

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

  5. 01:40

    מריץ את כל האירועים מחדש לדוגמה את האירוע on create שכאן אנחנו רואים שהוא בעצם הולך ויוצר ומציג את הלאוט המתאים לאוריינטציה. אז קודם כל בואו נבין רגע מה בעצם הבעיה אם יש לנו כאן לדוגמה את הטקסט ויו הזה שמציג לנו את המידע על הגולדפיש אז בואו לצורך הדוגמה נגדיר לו איזשהו איידי טקסט ויו גולדפיש ואנחנו רוצים להציג גם איזשהו אירוע on-click טקסט ויו גולדפיש underline on-click ומה

  6. 02:27

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

  7. 02:54

    אנחנו רוצים לאתר אותו, בואו נכניס לתוכו טקסט view גולד פיש, RID והנה ה-ID שלו, כך אנחנו יכולים לבוא לפה בזמן לחיצת קליק לבוא לטקסט view:

  8. 03:13

    goldfish.settextcolor ופשוט לתת לו איזשהו צבע לדוגמה blue. אוקיי, עכשיו אנחנו צריכים לבצע את השינויים האלה שעשינו ב-UI בשני הלייאוטים, זאת אומרת לא רק בלייאוט אחד של פורטרייט אנחנו רוצים ID ו-on-click אנחנו רוצים את זה בדיוק גם בלייאוט השני.

  9. 03:38

    אז בואו ניקח את ה-ID הזה as is, קונטרול C, נבוא לכאן, קונטרול V, נחזור בחזרה ונעתיק את ה-On Click הזה, קונטרול C, נחזור לפה, קונטרול V וכעת לא משנה מה הלאוט, אוטומטית הקוד הזה יופעל ויעבוד כמו שצריך.

  10. 04:03

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

  11. 04:23

    עכשיו נבצע קונטרול F12 ושימו לב שהכחול נעלם. נחזיר קונטרול F12 ועדיין הכחול שעשינו מקודם על הלייאוט של הפורטרייט לא חוזר בחזרה ולא משנה איפה אנחנו עושים את זה.

  12. 04:43

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

  13. 05:10

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

  14. 05:39

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

  15. 05:56

    עכשיו שימו לב שיכול להיות שהתבצעו שינויים גם ברמת ה-Layout כמו במקרה הזה וגם שינויים ברמה של Data Members שנמצאים באקטיביטי כל השינויים האלה נהרסים גם אם יש לנו פה איפה שהם משתנים הם בעצם נוצרים מחדש.

  16. 06:14

    ואנחנו לא זוכרים את כל המידע הקודם שהיה ברמת האקטיביטי.

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

ההרצאה הקודמת: Orientation Based Layout

ההרצאה הבאה: Cancel Activity Recreation

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

  • Activity Tracing
  • Activity Logs
  • הבדלים בין CC State לבין FC State
  • Distance-Vector vs Link-State

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

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