PracticU

Parcelable

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

Parcelable
העברת אובייקט משלנו בין שתי אקטיביטי בעזרת Serializable עובדת, אבל היא איטית כי היא נשענת על רפלקשן. כאן רואים טכניקה יעילה יותר, שבה אנחנו קובעים בעצמנו אילו נתונים נשלחים ובאיזה סדר.
איך זה עובד
1. הבעיה ב-Serializable: המערכת משתמשת ברפלקשן כדי "לחפור" בתוך האובייקט ולשלוף את כל ה-Data Member שלו. זה יחסית כבד וזולל זמן ומשאבים, במיוחד כשמעבירים כמויות גדולות של מידע.
2. הרעיון של Parcelable: במקום רפלקשן, מממשים את הממשק Parcelable ואומרים למערכת במדויק אילו Data Member לכתוב ולקרוא ובאיזה סדר. כך מנגנון הרפלקשן יוצא מהתמונה והמערכת מהירה יותר.
3. מימוש הפונקציות: מורידים את Serializable ויורשים את Parcelable, ואז Alt-Enter ו-Implement Methods. describeContents לא בשימוש כאן. ב-writeToParcel כותבים ל-dest את הנתונים: writeString ל-name, writeString ל-author ו-writeDouble ל-price. ה-Parcel הוא חבילה שבתוכה שמים את המידע ושולחים לאקטיביטי היעד.
4. קריאה באותו סדר: נוצר קונסטרקטור שמקבל Parcel בשם in, והוא קורא את הנתונים בדיוק באותו הסדר שבו נכתבו: name, author, price.
5. אובייקט Creator: המערכת מוסיפה גם CREATOR סטטי ו-final, שבו היא משתמשת כדי ליצור אובייקט Book חדש ולקרוא אליו את המידע. אין לגעת בו ויש להשאיר אותו כפי שהוא.
6. שליחה וקבלה: ב-main activity נשארים עם putExtra, כי יש לה גרסה שמקבלת Parcelable. באקטיביטי היעד מחליפים את getSerializableExtra ב-getParcelableExtra.
פקודות והגדרות
- writeToParcel: כתיבת הנתונים לחבילה.
- dest.writeString, dest.writeDouble: כתיבה לפי סדר.
- in.readString, in.readDouble: קריאה לפי אותו סדר.
- getParcelableExtra: שליפת האובייקט באקטיביטי היעד.
שימו לב
חשוב מאוד שסדר הקריאה יהיה זהה לסדר הכתיבה. המחיר הוא קוד נוסף שאולי פחות קריא, אבל משקיעים פעם אחת במחלקה, והאפליקציה מהירה יותר.
אחרי השיעור אפשר לשלוח אובייקט מהמחלקה שלנו מאקטיביטי אב לאקטיביטי בן ביעילות, בעזרת Parcelable.
השיעור הבא בקורס: Receive Data Back from Activity

פרקי ההרצאה: Parcelable

  1. 00:00

    החיסרון של Serializable ו-Reflection

  2. 00:56

    Parcelable כדרך יעילה יותר

  3. 02:16

    מימוש הממשק Parcelable

  4. 03:33

    describeContents ו-writeToParcel

  5. 04:14

    כתיבת השדות לחבילה בסדר קבוע

  6. 05:01

    הוספת Parcelable Implementation

  7. 06:00

    קונסטרקטור שקורא מה-Parcel

  8. 07:12

    אובייקט ה-CREATOR

תמלול ההרצאה: Parcelable

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

  1. 00:02

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

  2. 00:29

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

  3. 00:46

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

  4. 01:00

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

  5. 01:23

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

  6. 01:41

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

  7. 01:57

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

  8. 02:17

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

  9. 03:05

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

  10. 03:34

    אז הדבר הראשון שאנחנו צריכים להסתכל ולראות שקיים כאן זה Describe Contents וזה מבחינתנו Not in Use. אנחנו לא משתמשים איתו לפחות כרגע. הדבר הבא זה Write to Parcel ומה שאנחנו רוצים לכתוב זה Save דיזיירד דאטה, איזה דאטה אנחנו רוצים לכתוב לאקטיביטי היעד שלנו.

  11. 04:07

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

  12. 04:29

    לדוגמה writeString ואנחנו רוצים לכתוב קודם כל את ה-Name של הספר destination.writeString אנחנו מוצאים את ה-Autor יש לנו destination.writeDouble וזה יהיה ה-Price וחשוב מאוד הסדר של הכתיבה באותו הסדר בדיוק אנחנו צריכים לחלץ את המידע.

  13. 04:58

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

  14. 05:29

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

  15. 06:09

    והדבר הזה זה דבר מספר 4. הקונסטרקטור קודם כל מאפשר לנו לקרוא את המידע. אנחנו רואים שהוא מקבל פרסל אין ואנחנו רואים שהוא כבר הציע לנו לקרוא את המידע באותו הסדר name שווה in.readstring author שווה in.readstring ו-price שווה ל-in.readdouble אז המימוש הזה בעצם זה מימוש שאוטומטית קיבלנו

  16. 06:40

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

  17. 06:58

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

  18. 07:11

    אז יש לנו פה constructor for reading the data. והדבר האחרון שיש לנו זה בעצם מה שנקרא creator object. הדבר הזה חייב להיות בדיוק באותו שם creator המערכת נותנת לנו וזה בעצם איזשהו שימוש פנימי של המערכת שמאפשרת לה ליצור אובייקט בוק חדש ולקרוא דרכו את המידע.

  19. 07:45

    אתם רואים שזה גם static וזה final ומנגנון Java משתמשת בקריאטור בשביל לייצר אובייקט בוק ולקרוא את המידע ולהחזיר לנו את האובייקט הזה אלא אם כן יש לנו מערך ואז היא משתמשת

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

ההרצאה הקודמת: Serializable

ההרצאה הבאה: Receive Data Back from Activity

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

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