במסמך הזה מפורטות שיטות מומלצות לאופטימיזציה של צריכת החשמל באפליקציית ניווט לנייד שאתם מפתחים באמצעות ה-Navigation SDK. בנוסף, מתוארים בו היתרונות והחסרונות שצריך להביא בחשבון כשמשתמשים בשיטות האלה. באופן ספציפי, המסמך הזה עוסק בנושאים הבאים:
- מקורות לצריכת חשמל גבוהה, מדורגים מהגבוה לנמוך.
- אסטרטגיות לאופטימיזציה של צריכת החשמל, לפי סדר חשיבות, החל מקצב הפריימים.
- אסטרטגיות למשתמשי קצה כדי ללמד את משתמשי האפליקציה איך לנהל את השימוש במכשיר בזמן הניווט.
למה כדאי לבצע אופטימיזציה של אפליקציית הניווט?
בהתאם למצב, יכול להיות שהמשתמשים באפליקציה יפעילו את ההנחיות לניווט לפרקי זמן ארוכים. לדוגמה, נהגים ושליחים יכולים לעבוד שעות ארוכות ולבצע משימות באזורים לא מוכרים. במקרים כאלה, הם מסתמכים מאוד על ההנחיות המפורטות באפליקציה. זה גורם לכמה בעיות אופייניות:
- התרוקנות הסוללה וזמינות המטענים. שימוש אינטנסיבי בניווט עלול לגרום לסוללה של המכשיר להתרוקן מהר מהצפוי. משתמשים רבים יכולים לפתור את הבעיה הזו על ידי טעינת המכשיר ברכב, אבל נהגים של רכב דו-גלגלי לא יכולים לעשות זאת.
- האטת המכשיר בגלל התחממות. גם משתמשים שמטעינים את המכשיר באופן קבוע עלולים להיתקל בבעיות. צריכת חשמל גבוהה לאורך זמן עלולה לגרום למכשיר להתחמם, וכתוצאה מכך לוויסות תרמי ולירידה בביצועים.
אפליקציות לניווט מפורט מסתמכות על תכונות שצורכות הרבה אנרגיה, כמו המסך, ה-GPS ותקשורת רדיו עם מגדלי תקשורת, ולכן מומלץ לבצע אופטימיזציה של צריכת האנרגיה של האפליקציה לנייד. בנוסף, כדאי להביא בחשבון את צורכי צריכת האנרגיה של קהל היעד כדי שתוכלו לבצע את הפשרות המתאימות בין הביצועים לבין אופטימיזציה של צריכת האנרגיה.
מה צורך הכי הרבה חשמל?
הפעילויות באפליקציה שקשורות לצריכת חשמל גבוהה מחולקות לשתי קטגוריות:
- רינדור המסך
- עדכוני מיקום
רינדור המסך
עיבוד המסך בדרך כלל גורם לצריכת החשמל הגבוהה ביותר באפליקציות ניווט לנייד. בכל פעם שהמכשיר מציג מפה ורכיבים בממשק המשתמש במסך, הוא מסתמך על עיבוד של ה-GPU והמעבד (CPU). באופן דומה, כשהמשתמש משאיר את המסך דולק לפרקי זמן ארוכים, גם זה צורך יותר אנרגיה.
במידה מסוימת, אפשר לצפות לצריכת חשמל גבוהה מנהגים או מרוכבים שמסתמכים על מפה גלויה כדי לנווט, במיוחד אם הם משתמשים באפליקציה ברציפות במשך שעות רבות. במצב כזה, האפליקציה גם מבצעת עיבוד (rendering) בקצב גבוה יותר במסך, כי המפה מתעדכנת בזמן אמת. במקרים מסוימים, המסך יכול להשתנות כמעט ברציפות, במיוחד כשהמשתמש נוסע ממקום למקום בלי לעצור.
עדכוני מיקום
בנוסף לעיבוד המסך, שתי פעילויות ניווט אחרות צורכות את הסוללה של המכשיר:
- שימוש במגדל תקשורת וב-GPS
- עדכונים לגבי מיקום ושיתוף מיקום, למשל כדי לספק זמן הגעה משוער או לדווח על מיקומים של כלי רכב בצי.
גם תקשורת GPS וגם תקשורת רדיו סלולרית מסתמכות על פעולות הפעלה שצורכות הרבה אנרגיה: ה-GPS צריך למצוא לוויינים, והרדיו הסלולרי צריך לנהל משא ומתן עם מגדלים וליצור חיבור. לכן, הן פועלות באופן רציף במהלך הניווט, למרות שהרדיו הסלולרי נשאר פעיל למשך 20-30 שניות כדי לנסות למזער את עלויות ההפעלה. מערכת ההפעלה שולטת בהגדרות האלה, ואי אפשר לשנות אותן בקלות באפליקציה.
צריכת החשמל של עדכון לגבי מיקום משתנה בהתאם לגורמים בלתי צפויים. לדוגמה, המרחק בין המכשיר לתחנת הבסיס הסלולרית קובע את צריכת החשמל, כי המכשיר ישתמש באות המינימלי שנדרש כדי להמשיך בניווט, כדי להימנע מהחלפת אנטנות. לכן, מכשיר שמנווט באזור עם קישוריות חלשה יצרוך יותר חשמל ממכשיר שנמצא קרוב לתחנת בסיס. בנוסף, יכול להיות שאפליקציות מסוימות ישתפו עדכוני מיקום עם שירות מרכזי לניהול צי רכבים, ולכן יצטרכו לתקשר עם שרת כדי לעשות את זה.
אופטימיזציה של צריכת החשמל באפליקציה
האתגר באופטימיזציה של צריכת החשמל באפליקציות ניווט הוא שהאפליקציות האלה מסתמכות במידה רבה על משאבים שצורכים הרבה חשמל, מה שמגביל את האפשרויות לצמצם את ההשפעה בלי לבצע פשרות, כמו הגבלת השימוש במסך. בקטע הזה מפורטות גישות שונות לאופטימיזציה של האפליקציה, מהגישה הכי משפיעה ועד לגישה הכי פחות משפיעה.
שינוי קצב הפריימים
המסך מעדכן את מה שמוצג בו בתדירות שנקראת קצב פריימים, שבדרך כלל נמדדת בפריימים לשנייה (FPS). העיבוד של המסך צורך הרבה משאבים מהמעבד (CPU) ומהמעבד הגרפי (GPU), ולכן אפשר להפחית את קצב הפריימים כדי לחסוך בחשמל.
כשמפחיתים את קצב הפריימים, יכול להיות שהעיבוד של המפה והתנועות האינטראקטיביות (כמו הזזה, שינוי מרחק התצוגה או סיבוב) ייראו פחות חלקים. כדי לאזן בין יעילות צריכת החשמל לבין חוויית משתמש רספונסיבית, אתם יכולים לשמור על קצב פריימים בסיסי נמוך ולהגביר אותו באופן דינמי במהלך אינטראקציות פעילות של המשתמשים.
במכשירי iOS, ה-SDK של מפות ל-iOS חושף את המאפיין preferredFrameRate ב-GMSMapView כדי לשלוט בקצב הפריימים. בטבלה הבאה מוצגים הערכים של GMSFrameRate שאפשר לשנות:
| ערך Swift | ערך Objective-C | תיאור |
|---|---|---|
.powerSave |
kGMSFrameRatePowerSave |
כדי לחסוך בסוללה, השתמשו בקצב הפריימים המינימלי. |
.conservative |
kGMSFrameRateConservative |
כדאי להשתמש בקצב פריימים חציוני כדי לספק עיבוד חלק יותר ולחסוך במחזורי עיבוד. |
.maximum |
kGMSFrameRateMaximum |
משתמשים בקצב הפריימים המקסימלי של המכשיר (30 פריימים לשנייה במכשירים פשוטים, 60 פריימים לשנייה במכשירים מתקדמים). |
למידע נוסף, אפשר לעיין בקטע GMSFrameRate במסמכי התיעוד של Navigation SDK ל-iOS.
כדי להגדיר את קצב הפריימים המועדף ישירות, מקצים ערך ל-mapView.preferredFrameRate:
Swift
// Reduce the frame rate to conserve battery:
mapView.preferredFrameRate = .powerSave
Objective-C
// Reduce the frame rate to conserve battery:
mapView.preferredFrameRate = kGMSFrameRatePowerSave;
שינוי דינמי של קצב הפריימים במהלך תנועות
קצבי פריימים נמוכים יותר יכולים לגרום לאינטראקציות של המשתמשים (כמו הזזה, שינוי מרחק התצוגה וסיבוב) להיראות מקוטעות. כדי לשמור על אינטראקציות חלקות וגם לחסוך בחשמל, אפשר להגדיל באופן זמני את קצב הפריימים למקסימום במהלך תנועות של המשתמש, ואז לחזור לקצב פריימים שחוסך בחשמל כשהתנועה מסתיימת.
כדי לעשות את זה, מאמצים את הפרוטוקול GMSMapViewDelegate ומטמיעים את השיטות הבאות:
- ב-
mapView:willMove:, בודקים אם תנועת המצלמה הופעלה על ידי תנועה של המשתמש. אםgestureהואtrue, צריך להגדיר אתpreferredFrameRateלמקסימום. - ב-
mapView:idleAtCameraPosition:, צריך להחזיר אתpreferredFrameRateלמצב חיסכון בסוללה כשהמצלמה לא פעילה.
בדוגמת הקוד הבאה אפשר לראות איך לשנות באופן דינמי את קצב הפריימים במהלך תנועות של המשתמש:
Swift
class YourViewController: UIViewController {
@IBOutlet weak var mapView: GMSMapView!
override func viewDidLoad() {
super.viewDidLoad()
mapView.delegate = self
// Set a baseline low frame rate to conserve power:
mapView.preferredFrameRate = .powerSave
}
}
// MARK: - GMSMapViewDelegate
extension YourViewController: GMSMapViewDelegate {
func mapView(_ mapView: GMSMapView, willMove gesture: Bool) {
// Increase frame rate during user gestures for smooth interaction:
if gesture {
mapView.preferredFrameRate = .maximum
}
}
func mapView(_ mapView: GMSMapView, idleAt position: GMSCameraPosition) {
// Restore the power-saving frame rate when gestures finish:
mapView.preferredFrameRate = .powerSave
}
}
Objective-C
@interface YourViewController : UIViewController <GMSMapViewDelegate>
@end
@implementation YourViewController {
GMSMapView *_mapView;
}
- (void)viewDidLoad {
[super viewDidLoad];
_mapView.delegate = self;
// Set a baseline low frame rate to conserve power:
_mapView.preferredFrameRate = kGMSFrameRatePowerSave;
}
#pragma mark - GMSMapViewDelegate
- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture {
// Increase frame rate during user gestures for smooth interaction:
if (gesture) {
mapView.preferredFrameRate = kGMSFrameRateMaximum;
}
}
- (void)mapView:(GMSMapView *)mapView
idleAtCameraPosition:(GMSCameraPosition *)position {
// Restore the power-saving frame rate when gestures finish:
mapView.preferredFrameRate = kGMSFrameRatePowerSave;
}
@end
ניווט בלי מפה
אתם לא יכולים לשלוט בבהירות המסך של משתמש הקצה או במשך הזמן שהמסך שלו נשאר דלוק, אבל אתם יכולים לספק אפשרות להנחיות ניווט בלי מפה. כך משתמש הקצה יוכל לבחור באפשרות הזו כדי לחסוך בחשמל. לדוגמה, אם הנהגים עובדים באופן קבוע באותה שכונה, יכול להיות שהם לא יצטרכו הנחיות מבוססות-מפה בתדירות גבוהה. כדי להפעיל ניווט בלי מפה, צריך להגדיר יעד ולהתחיל את ההנחיה ב-Navigation SDK, אבל לא להציג מפה.
מוסיפים שורת קוד כדי להסתיר את GMSMapView:
mapView.isHidden = true
ה-SDK של הניווט ימשיך לעדכן את המיקומים שמוצמדים לכביש, את זמן ההגעה המשוער ואת המרחק שנותר לנסיעה, והאפליקציה עדיין תוכל להירשם לכל האירועים שמועלים על ידי ה-SDK בזמן שהנהג ממשיך בנסיעה. זה לא מתאים לכל תרחיש שימוש, וזו לא עצה טובה במקרים שבהם הנהג צריך לראות את המפה ולעקוב אחרי ההנחיות החזותיות. צילומי המסך הבאים ממחישים השוואה בין תצוגות המפה השונות במהלך ניווט פעיל.
|
|
שימוש בסגנון מפה כהה
כדאי לעצב את המפה בעיצוב כהה כדי לצמצם את כמות האנרגיה שנדרשת לעיבוד המפה במסך.
Navigation SDK מעבד את המפות באמצעות Google Maps SDK ל-iOS, שכולל אפשרויות לעיצוב של כל תצוגות המפה באפליקציה שלא קשורות לניווט. תצוגת הניווט תומכת גם בהפעלה ידנית של מצב כהה. יכול להיות שההגדרה הזו לא תשפיע על כל המכשירים באותו אופן בגלל הבדלים בסוג המסך, אבל במקרים מסוימים היא מאפשרת חיסכון פוטנציאלי בצריכת החשמל. במחקר שנערך לאחרונה נמצא שכמות האנרגיה שנחסכת באמצעות מצב כהה במסכים מסוימים תלויה במידת הבהירות של המסך בתחילת השימוש. לדוגמה, המצב הכהה חוסך יותר אנרגיה במסכים שמוגדרים לבהירות מלאה מאשר במסכים שהבהירות שלהם כבר מותאמת ל-30-50% מהמקסימום. חשוב להביא את זה בחשבון כשמשתמשים במצב כהה באפליקציות, כי החיסכון באנרגיה יהיה יחסי לאופן שבו משתמש הקצה מגדיר את בהירות המסך.
מידע נוסף על שינוי ממשק המשתמש של ה-Navigation זמין במאמר שינוי ממשק המשתמש של ה-Navigation.
כדי להשתמש בעיצוב מפות מבוסס-ענן, צריך מזהה מפה שמייצג הגדרת מפה בצד השרת שנוצרה בפרויקט שלכם במסוף Google. מידע נוסף על יצירת מזהה מפה זמין במאמרי העזרה למפתחים בנושא מזהה מפה. פרטים נוספים על עיצוב ופריסה של סגנון מפה מבוסס-ענן זמינים במאמרי העזרה למפתחים בנושא יצירה וניהול של סגנונות מפה מבוססי-ענן.
שינוי תדירות העדכון של מיקום ה-GPS
כשבוחנים את צריכת החשמל של עדכוני המיקום שנשלחים מהמכשיר, צריך להתמקד יותר בתדירות של עדכוני המיקום ולא בכמות הנתונים שנשלחים בשידור.
אי אפשר לשלוט בזה ישירות ב-Navigation SDK. אותה עצה רלוונטית גם לשימוש במקורות מיקום שאינם GPS (רשת סלולרית ו-Wi-Fi).
שליחת עדכונים שוטפים למשתמשים
יכול להיות שהמשתמשים באפליקציה שלכם ירצו לדעת איך לבצע אופטימיזציה של צריכת החשמל. כדי לעזור להם להפחית את צריכת החשמל באפליקציות, כדאי להמליץ למשתמשים לבצע את הפעולות הבאות:
- נועלים את הטלפון
- העברת אפליקציית הניווט לרקע
- אם אפשר, השתמשו בניווט בלי מפה
- להפחית את בהירות המסך, באמצעות מצב כהה במסכי OLED ו-AMOLED או באמצעות הפעלת בהירות אוטומטית.
- שמירה על טמפרטורה נמוכה של המכשיר
- מתחברים ל-Wi-Fi ברכב, אם יש כזה.
מדידת צריכת החשמל
אפשר להשתמש בכלים מקצועיים כדי למדוד את צריכת החשמל, אבל לעיתים קרובות קשה או יקר להשיג אותם. אפליקציות וכלים ליצירת פרופילים של סביבות פיתוח משולבות (IDE), כמו Power Profiler ב-Android Studio והחלונית Battery Usage ב-XCode Organizer, מודדים את צריכת החשמל, אבל יכול להיות שיהיה קשה להסיר את ההשפעה של תהליכים ברקע או להגדיר בסיס להשוואה של הביצועים. במקרים מסוימים, הגבלות במכשיר עלולות למנוע גישה לנתונים הנדרשים.
אתם יכולים להשתמש בחומרה ייעודית למעקב אחרי צריכת החשמל ולשנות את הגדרות החיבור של הסוללה. יש מוצרים ושירותים מסחריים שיכולים לעזור לכם לעשות את זה. חשוב לזכור ששינוי מכשירים בדרך הזו עלול לבטל את האחריות על המכשיר.