PracticU

Provider Fallback

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

Provider Fallback
חיפוש פרוביידר לפי קריטריון מוצא את הפרוביידר הזמין והטוב ביותר, אבל לא מבטיח שהוא יעבוד בשטח. למשל GPS זמין במכשיר, אך אין קליטה במקום. הפתרון בהרצאה הוא fallback: מנסים GPS, ואם אחרי זמן מה אין מיקום, עוברים ל-Network.
השלבים העיקריים
1. הרעיון: מתחילים בפרוביידר המדויק (GPS). אם הוא לא מספק מיקום בזמן קצוב, עוברים לפרוביידר הבא (Network, ואפשר להמשיך ל-Passive). ההדגמה פשוטה: GPS ואז Network.
2. פיצול הרישום: הפונקציה הקיימת הופכת ל-registerGpsLocationUpdates, ומשכפלים אותה ל-registerNetworkLocationUpdates עם NETWORK_PROVIDER. הפונקציות של הקריטריון נמחקות, והקריאות בלחצן ובתשובת ההרשאה פונות לרישום GPS.
3. הטיימר: משתנה Timer גלובלי. ב-registerGpsLocationUpdates, אם הטיימר קיים מבטלים אותו (cancel), יוצרים חדש, ו-schedule עם TimerTask אנונימי ל-10 שניות. ב-run קוראים ל-registerNetworkLocationUpdates. ב-Network משנים את הזמן המינימלי מ-5 ל-10 שניות, כי הוא פחות מדויק.
4. ביטול הטיימר ב-Unregister: כשמפסיקים לקבל מיקום, מבטלים את הטיימר ומאפסים אותו ל-null.
5. כשה-GPS מצליח: ב-onLocationChanged, אחרי הבדיקה שה-Location אינו null, בודקים אם location.getProvider() שווה ל-GPS_PROVIDER. אם כן, קוראים ל-unregisterLocationUpdates (שמבטל גם את הטיימר) ואז שוב ל-registerGpsLocationUpdates.
בדיקה
- אמולטור: המיקום נשלח דרך DDMS, הפרוביידר מופיע כ-GPS מיד, ולכן ה-fallback לא הופעל.
- מכשיר אמיתי בתוך מבנה: ה-GPS לא מספק אות, אחרי כמה שניות נכנס הטיימר, ומתקבל מיקום מה-Network. אם ה-GPS יתחיל לפעול, הרישום יעבור חזרה אליו.
כך האפליקציה תמיד משתמשת בדיוק האופטימלי שזמין: GPS כשיש, וכשאין, Network.
השיעור הבא בקורס: Fused Provider

פרקי ההרצאה: Provider Fallback

  1. 00:00

    המגבלה של חיפוש לפי Criteria

  2. 01:18

    מה זה Fallback בין Providers

  3. 02:14

    רישום עדכוני מיקום לפי GPS

  4. 03:35

    פונקציה נוספת עבור Network Provider

  5. 04:16

    טיימר כמנגנון Fallback

  6. 05:40

    יצירת Timer ו-TimerTask

  7. 07:36

    ביטול הטיימר ב-Unregister

  8. 08:16

    בדיקת המיקום ב-onLocationChanged

תמלול ההרצאה: Provider Fallback

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

  1. 00:00

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

  2. 00:27

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

  3. 00:49

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

  4. 01:10

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

  5. 01:25

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

  6. 01:52

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

  7. 02:06

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

  8. 02:26

    בואו נחזור בחזרה ל-Register Location Update, ונחזיר את ה-GPS. יש לנו פה GPS Provider, אין לנו כרגע את הפונקציות של הקריטריה, נמחק אותם, ויש לנו עכשיו פונקציה, אבל הפונקציה הזאת מבצעת Registration לפי GPS, ולכן נקרא לה Register GPS Location Updates.

  9. 03:01

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

  10. 03:23

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

  11. 03:55

    אנחנו כמובן רוצים להשתמש עם ה-Network Provider. כרגע בינתיים אף אחד לא קורה לפונקציה הזאת. אז איך אנחנו עובדים עם Fallbacks? אז קודם כל כמו שאנחנו רואים אנחנו אומרים שהניסיון הראשון שלנו לבקש מיקום לפי פרוויידר זה לפי ה-GPS, אנחנו הולכים כרגע על דיוק גבוה.

  12. 04:21

    מה אנחנו רוצים לעשות בפונקציה של ה-GPS? מה שאנחנו רוצים לעשות בפונקציה של ה-GPS, זה להפעיל טיימר. זאת בעצם שיטה אחת לביצוע fallback. הטיימר, בואו נניח, יופעל כעבור 10 שניות, וכעבור 10 שניות הוא אוטומטי תקרא לפונקציה של ה-Network Location Updates.

  13. 04:48

    אם כן הצלחנו במהלך ה-10 שניות האלה להשיג מיקום לפי ה-GPS, אנחנו פשוט מבטלים את הטיימר, ואז הטיימר לא יקרה לפונקציה הזאת. כל פעם שאנחנו קוראים לפונקציה Register GPS Location Updates, אנחנו גם אפילים טיימר שאחרי 10 שניות מנסה להפעיל את הפונקציה הזאת.

  14. 05:12

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

  15. 05:24

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

  16. 05:51

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

  17. 06:25

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

  18. 06:46

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

  19. 07:05

    זאת אומרת שיש כבר טיימר ישן, אז אנחנו רוצים to cancel it, ומיד להתחיל וליצור טיימר חדש. אחרי עשר שניות אנחנו רוצים לקרוא לפונציה Register Network Location Updates.

  20. 07:24

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

  21. 07:45

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

  22. 08:08

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

  23. 08:24

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

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

ההרצאה הקודמת: Find Best Provider

ההרצאה הבאה: Fused Provider

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

  • הסבר על Provider ב-Flutter
  • הגדרת AWS provider - פרויקט NodeJS

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

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