מנהל המשימות של אנדרויד, או למה לא צריך לסגור משימות

אריה אושרוב מסביר כיצד עובד מנהל המשימות שבאנדרויד ומדוע אין צורך לסגור משימות.

7:00
  /  
30.03.2011
  
מאת: אריה אושרוב

מנהל המשימות באנדרואידrn

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

  • הם לא רצו שמשתמש יצטרך להודיע למערכת שהוא סיים לעבוד עם משימה rn(Activity) כלשהיא, לדעתם זה משהו שלא יכול לעבוד בעולם המובייל (אגב, אפל rnהעתיקו את המודל הזה גם ל iOS4 החדש שלהם) rn

rnrn

  • למכשירי מובייל אין כיום את היכולת לעבוד עם swap space (הכוונה כאן היא rnלחוסר היכולת "להעתיק" משימות שרצות בזיכרון ל hard drive כמו במערכות OS rnאחרות, עשירות במשאבים)…למכשירי מובייל אין דיסקים מהירים המאפשרים לבצע rnswap מהיר בין הזיכרון לדיסק (אגב, זאת מגבלת משאבים קשה שסותרת את הסעיף rnהראשון)rn

rnrn

  • החלפת משימות במכשירי מובייל חייב להתבצע באופן מיידי בלי של-משתמש יהיה rnצורך להמתין זמן ארוך מידי עד שהמשימה (אפליקצייה) תופיע על המסך. הזמן rnשנקבע ע"י גוגל באנדרואיד הוא עד שנייה אחת להפעלת אפליקצייה חדשהrn

rnrn

  • כל ספריות הפיתוח (API) על האנדרואיד הן שוות ונגישות לכל מפתחי rnהאפליקציות! כלומר לתוכנות המובנות של גוגל אין שום יתרון על תוכנות אחרות rnבמערכת. כלומר כל תוכנה שרצה ברקע היא שויונית לגמרי לכל תוכנה אחרת. זה rnנכון גם בשלב הפיתוח, שם גוגל לא משתמשים בשום פונקציה או יכולת, שלא נגישהrn למפתחי אפליקציות צד ג'rn

rnrn
rnמהנקודות העלה הם יצרו מנגנון לניהול משימות המגדיר בעצם מה ומתי אפליקצייהrn רצה, מתי היא נכנסת למוד suspend, מתי היא נסגרת (stop) ע"י המערכת rnוהמשאבים שלה משתחררים, איך המערכת בכל זאת יודעת לשמר על מצב האפליקציה rnשנסגרה גם כאשר המשתמש פותח אותה שוב מאוחר יותר (שמירת ה state), למי מותרrn באמת לרוץ במקביל ברקע (ל BroadcastReceiver ואפליקצייה שמוגדרת כ rnServices), הגדרה לגבי עדיפויות (מנגנון שמחשב עדיפויות איזה אפליקצייה rnחשובה יותר וכן היא זאת שתסגר אחרון ע"י המערכת) וכו. rn
rnrn
rnלמרות שזה משהו שהוא לא אינטואטיבי לכל מי שמגיע מעולם החלונות שם הוא רגילrn לסגור אפליקציות כאשר הוא סיים לעבוד איתן, באנדרואיד אין בכך צורך rn(לעיתים הריגת אפליקציות ע"י מנהל משימות יכולה להוביל לאיבוד מידע)….יש לסייג מעט את הדברים שליrn מכיוון שאפליקציה סוררת יכולה במודל הזה לרוץ ברקע, זמן מסויים, ולצרוך rnמשאבי מערכת (בעיקר סוללה) וזה עד שהמנגנון יגיד די מספיק, צריך לסגור. rnנניח אם אתם משתמשים בתוכנת ניווט GPS ולא סגרתם את האפליקצייה כאשר יצאתם rnממנה (ל Waze לדוגמה יש כפתור exit) אז ייתכן שאם התוכנה הזאת מומשה (לא rnנכון) היא ממשיכה לנווט ברקע וכדי לא לגמור לכם את הסוללה ואת משאב הזיכרוןrn והמעבד, יש צורך לסגור אותה כאשר יוצאים ממנה. ברוב, התוכנות אין בכך צורךrn ואם נתקלתם בתוכנה שרצה ברקע ואוכלת לכם משאבים בלי הגיון, פשוט צריך rnלהסיר אותה ולחפש אפליקצייה אחרת….rn
rnrn

הסבר טכני מעמיק קצת יותר

כל מי שמגיע מפיתוח ב OS-ים אחרים (לינוקס, חלונות מאק וכו) יופתע לגלות rnשבאנדרואיד שאין חיבור בין המונח process (תהליך) ואפליקצייה rn(application). אין בהכרח קשר בין השניים. אפליקצייה יכולה להיות מוצגת rnלמשתמש בלי שמאחורייה רץ תהליך כלשהו (מדוייק נכון להגיד שאין חובה שברקע rnירוץ איזה thread שמשויך לאפליקצייה)…יותר מזה מספר אפליקציות יכולות rnלהשתמש בתהליך יחיד לצורך עבודתן (אגב, תהליך שווה לזמן עבודה של rnמעבד->דבר שגורם בסופו של דבר לניצול משאב המעבד->שמביא כמובן גם rnלניצול יתר של הסוללה)….אנדרואיד יודע לנהל את התהליכים ואת האפליקציות rn(המצב שלהן) במערכת באופן אוטו' באלגוריתם שבמוסס על עדיפות (לדוגמה rnאפליקצייה שנמצא בחזית היא בעדיפות גבוה יותר מאשר אחת שמוסתרת חלקית וזאת rnנמצאת בעדיפות על אפליקצייה שמוסתרת לגמרי וכו). כל היופי הואrn שהמערכת יודעת להעביר לך את האפליקציות ממצב למצב בלי שזה מעניין אותך rn(היא יודעת לנהל בשבילך את משאבי המערכת)…..עוד מנגנון (שהועתק ל iOS) rnהוא היכולת של מנהל המשימות לסגור לגמרי אפליקציות וזה בלי שהמשתמש מרגיש rnבכך (כלומר אם המשתמש חוזר לאפליקצייה כלשהיא, גם אם מנהל המשימות סגר rnאותה, המשתמש יקבל בדיוק את אותו המצב בו האפליקצייה הייתה לפני כן). שמירתrn ה state הזה נעשית באופן אוטו' ע"י מנגנון מתוחכם שיודע לשמור את ה state rnשל האפליקציה שרלוונטי למשתמש (זה ה Activity) בכל פעם שהיא מפסיקה לרוץ rnבחזית (מנגנון השמירה הזה נעשה כל הזמן ולא לפני שהאפליקצייה rnנסגרת)….המנגנון הזה ששומר את המצב באופן אוטו' מאפשר למנהל המשימות rnלסגור אפליקציות במהירות ברגע, כאשר יש מחסור במשאבים (kill) וזה בלי הצורךrn "לדבר" עם האפליקצייה עצמה (האפליקצייה לא בהכרח מקבלת הודעה שהיא הולכת rn"למות")….rn

המנגנון הזה מאפשר:

rn1. להוריד ולהעלות אפליקציות ע"י המערכת במהירות גבוה מאוד (אתה בכלל לא מודע למנגנון הזה)rn
rn2. אין צורך להסתמך על מימוש קלוקל של האפליקציות עצמן rn
rnrn
השורה התחתונה, היא שלמרות שקשה rnמאוד לשכנע אנשים ששנים רגילים לסגור אפליקציות בחלונות, אין כמעט צורך rnלהתעסק עם מנהל משימות צד ג' שיסגור לך אפליקציות כל הזמן על האנדרואיד. rn
rnrn
ה downside של המנגנון הזה הוא:

rn-שימוש מסוים במשאבי מערכת (מעבד וזיכרון) על מנת לתחזק אותו rn
rn-זה שעדיין אפליקציות סוררות מאוד (שרצות כשירות במערכת) יכולות לנצל את rnהמשאבים ולאכול סוללה (עד שהמנגנון יהרוג אותן)…ולכן אפליקציות כאלה, אם rnיש לכם, דורשות הסרה ולא שימוש במנהל משימות שיהרוג אותן כל הזמןrn
rnrn
rnלסיכום אני יכול להגיד לכם שאני עובד עם האנדרואיד ויש לי תוכנה לניהול rnמשימות אבל אני לעיתים רחוקות מאוד משתמש בה…כי פשוט אין בזה צורךrn
rnrn
rnהנה תרשים שמציג את המצבים בהם activity באנדרואיד יכול להיות:rn

 

 

להמשך הדיון בפורום לחצו כאן


7:00
  /  
30.3.2011
  
מאת: אריה אושרוב

1