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

אפליקציות, מערכות הפעלה של גוגל אנדרויד - ginger bread, ice cream sandwich, froyo, jelly bean
osherov פותח השרשור
סמל אישי של משתמש
גורו Android
גורו Android
תגובות: 15029
הצטרף: אפריל 2007
נתן תודות: 201 פעמים
קיבל תודות: 513 פעמים

שרשור שלא נקרא #1 

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

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

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

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

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

מהנקודות העלה הם יצרו מנגנון לניהול משימות המגדיר בעצם מה ומתי אפליקצייה רצה, מתי היא נכנסת למוד suspend, מתי היא נסגרת (stop) ע"י המערכת והמשאבים שלה משתחררים, איך המערכת בכל זאת יודעת לשמר על מצב האפליקציה שנסגרה גם כאשר המשתמש פותח אותה שוב מאוחר יותר (שמירת ה state), למי מותר באמת לרוץ במקביל ברקע (ל BroadcastReceiver ואפליקצייה שמוגדרת כ Services), הגדרה לגבי עדיפויות (מנגנון שמחשב עדיפויות איזה אפליקצייה חשובה יותר וכן היא זאת שתסגר אחרון ע"י המערכת) וכו.

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

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

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

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

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

הנה תרשים שמציג את המצבים בהם activity באנדרואיד יכול להיות:
[img2=550x717]http://developer.android.com/images/act ... ecycle.png[/img2]

mp3lll
סמל אישי של משתמש
חבר במועדון ה-20K
חבר במועדון ה-20K
תגובות: 20653
הצטרף: ספטמבר 2007
נתן תודות: 134 פעמים
קיבל תודות: 1005 פעמים

שרשור שלא נקרא #2 

אתה גאון תודה.
"הציבור מטומטם ולכן הציבור משלם" - אין יותר אקטואלי מזה.

truejoker
חבר מכור קשה
חבר מכור קשה
תגובות: 5738
הצטרף: יולי 2007
נתן תודות: 72 פעמים
קיבל תודות: 52 פעמים

שרשור שלא נקרא #3 

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

AviBiton
סמל אישי של משתמש
גורו HTmobile
גורו HTmobile
תגובות: 17346
הצטרף: אפריל 2005
מיקום: קרית שמונה
נתן תודות: 503 פעמים
קיבל תודות: 358 פעמים

שרשור שלא נקרא #4 

(Y)
תודה על ההסבר המלומד.

ברשותך, אני אוסיף ואציין, שכל המתודות שמוגדות לActivity ניתנות למימוש ע"י כל כותב תוכנה.
ז"א, שכאשר אני כותב אפליקציה (שיורשת/מרחיבה את Activity), אני בד"כ אממש את ()oncr-eate (שיאמר למערכת מה לעשות בזמן היווצרות האפליקציה), וזה ברור וטוב.

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

osherov פותח השרשור
סמל אישי של משתמש
גורו Android
גורו Android
תגובות: 15029
הצטרף: אפריל 2007
נתן תודות: 201 פעמים
קיבל תודות: 513 פעמים

שרשור שלא נקרא #5 

truejoker,
באנדרואיד יש גם אפליקציות שיכולות לרוץ באופן מלא ברקע (הן רצות כשירות\Service) הן רצות גם כאשר הן לא בחזית. אפליקצייה כמו לדוגמה נגן המוזיקה, שם ברור לכולנו שתוכנה כזאת צריכה לנגן שירים גם כאשר היא לא בחזית (רוב הזמן היא לא בחזית). דוגמאות נוספות הן תכונות להורדת קבצים, תוכנות ניווט קוליות, דפדפן שמוריד את הדף עכשיו מאיזה קישור וכן גם תוכנת אנטי וירוס. למרות שדווקא כאן יש מנגנון נוסף באנדרואיד "תובעני" פחות מ service (שירות) המאפשר לאפליקצייה לקבל זמן ריצה קצר (משאב מעבד) כדי לבצע משימה קצרה. זה נקרא BroadcastReceiver, ובאנדרואיד אתם רואים את זה המון פעמים....לדוגמה כאשר מגיע מייל ואתם מקבלים נוטיפיקצייה רגעית, או כאשר השעון המעורר צריך לצלצל פתאום לכמה שניות, או במנגנון שמודיע לכם שיש עידכון תוכנה חדש, או טוויט שבדיוק מגיע למכשיר שלכם, או עידכון מזג אוויר שמתבצע כל תקופה מסויית מול שרשת ברשת וכו. גם תוכנת אנטי וירוס יכולה לרוץ במוד הזה ולבדוק קובץ מסויים נגיד רק כאשר לדוגמה הם מוריד למערכת (אחרי נניח התקנה).....ממש אין לאנטי וירוס חובה לרוץ כל הזמן ברקע ולגזול זמן מעבד וזמן סוללה

זהו אלה כל סוגי האפליקציות שיש באנדרואיד:
Activity-מודול המייצג ממשק משתמש (visual user interface) יחיד (יכולים להיות כמה כאלה באפליקצייה אחת)
Service-מודול ללא ממשק משתמש שרץ ברקע
Broadcast receiver-מודול שלא עושה כלום למעט להמתין לעיכון כלשהו מהמערכת ואז לבצע משימה קצרה

בנוסף יש לציין שכמפתח יש לך את היכולת בזמן ריצה להתחיל (לעבור) ממוד למוד (נניח ממצב Activity שמציג ממשק כלשהו למצב ריצה ברקע כ Service).....אני לא יודע כמה אנשים כאן מגיעים עם רקע פיתוחי כלשהו אבל אם כן, הם בטח יכולים להבין עד כמה הארכיטקטורה באנדרואיד היא פשוטה וקלה מאוד לשימוש ומימוש (שלא לדבר שהכל נעשה בשפת java בשימוש ספריות פשוטות יחסית)....יאלה רוצו לכתוב אפליקציות לאנדרואיד :wink:

osherov פותח השרשור
סמל אישי של משתמש
גורו Android
גורו Android
תגובות: 15029
הצטרף: אפריל 2007
נתן תודות: 201 פעמים
קיבל תודות: 513 פעמים

שרשור שלא נקרא #6 

אבי,
קצת Off-Topic אבל שאתה כותב אפליקציה קח בחשבון שהמערכת לא מחויבת לקרוא לפונקציות OnStop ו OnDestroy גם אם מימשת אותן!!
המערכת יכולה להרוג לך את ה Activity בלי לקרוא לפונקציות האלה, לכן תזהר לא לבצע בפונקציות האלה משהו שאתה מחויב לבצע בכל יציאה מהאפליקצייה שלך! (לדוגמה אם אתה צריך לשמור מצב של האפליקצייה שלך אל תממש את זה בפונקציות האלה)...הפונקציה האחרונה שמובטחת שתקרא אצלך ע"י המערכת היא onPause

AviBiton
סמל אישי של משתמש
גורו HTmobile
גורו HTmobile
תגובות: 17346
הצטרף: אפריל 2005
מיקום: קרית שמונה
נתן תודות: 503 פעמים
קיבל תודות: 358 פעמים

שרשור שלא נקרא #7 

(Y)
לא הייתי בטוח, עשית לי סדר.

osherov פותח השרשור
סמל אישי של משתמש
גורו Android
גורו Android
תגובות: 15029
הצטרף: אפריל 2007
נתן תודות: 201 פעמים
קיבל תודות: 513 פעמים

שרשור שלא נקרא #8 

אבי,
אני בונה עלייך שאתה זה שתכתוב סוף-סוף לאנרואיד את האייפון קילר!
אגב, לא משמעמם אותך ה Java הזה?

osherov פותח השרשור
סמל אישי של משתמש
גורו Android
גורו Android
תגובות: 15029
הצטרף: אפריל 2007
נתן תודות: 201 פעמים
קיבל תודות: 513 פעמים

שרשור שלא נקרא #9 

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

אבל כן יש להם דרכים לא רעות להתמודד עם הבעייה הזאת:
1. קיים מידרוג האפליקציות במרקט שנעשה ע"י המשתמשים עצמם. כלומר לכל מי שיש אנדרואיד יודע שאפליקציות שמקבלות דירוג של 4-5 כוכבים במרקט מ 250K משתמשים הן כאלה שכן ששווה להוריד (אם צריך אותן) ולאפליקציות בעלות דירוג נמוך לא כדאי להתקרב

2. במרקט יש גם מנגנון פידבקים (קצת דומה למה שיש ב E-Bay), שם המשמתשים עצמם רושמים את הערות שלהן בכל הנוגע לאפליקצייה שהם הורידו

3. בנוסף לגוגל יש מנגנון דיווח על אפליקציה בעייתית...זה נעשה גם בזמן שאתם מקבלים Force Close לאפליקצייה שם אתם יכולים לדווח מידית על הבעייה, אבל חשוב מכך אם תסירו את האליקצייה דרך המרקט אתם תקבלו מסך ששואל אתכם לסיבת ההסרה (אתם יכולים לבחור שם שהסיבה קשורה לבאג, או לפעולה זדונית של התוכנה וכו). אם גוגל מקבלת מספיק ביקורות שליליות על אפליקציה, היא מזהירה את הכותב שלה על הבעייה ואם הדיווח ימשיך, אז האפליקציה תוסר בסופו של דבר מהמרקט (לדוגמה, כותב האפליקציה PandroidIL שהוצגה כאן בפורום, אפליקצייה המאפשרת לכם שירות חנייה בכל הארץ, הסיר את האפליקצייה שלו מהמרקט וזה בעקבות תלונות של אנשים שהיא לא עובדת כשורה בכל המקומות....הוא הוריד אותה מהמרקט לצורך "שיפוצים" בעקבות אזהרה מגוגל)

4. חשוב לדעת שהחלון הראשון שאתם מקבלים ברגע שבחרתם להוריד אפליקצייה מהמרקט מכיל אינפורמציה חשובה לגבי ההרשאות שהאפליקציה החדשה דורשת מהמערכת שלכם (לדוגמה שימוש ברשת, שימוש ב SD, שימוש במצלמה, שימוש בביצוע שיחות, שימוש בקריאת נתונים מתיקיית מערכת, שימוש ב GPS וכו)....אם האפליקצייה תנסה לבצע פעולה אשר אין לה הרשאות לכך, המערכת לא תאפשר זאת.....ולכן מומלץ לכם בחטף לעבור על ההרשאות הרשומות בחלון הזה (בדיוק 5 שניות) וזה על מנת לראות שהתוכנה לא מבקשת משהו שלא נשמע לכם הגיוני (נניח משחק שדורש הרשאות לבצע שליחת SMS-ים או שימוש ב GPS)...שכל ישר ימנע מכם להתקין כל מיני תוכנות זדוניות שעושות מה שאסור להן (כמו אותו וירוס שדווח עליו לא מזמן ששולח SMS-ים לכל מיני נמענים בלי רשות שלכם)

טלHD
סמל אישי של משתמש
גורו
גורו
תגובות: 13885
הצטרף: נובמבר 2008
נתן תודות: 944 פעמים
קיבל תודות: 1091 פעמים

שרשור שלא נקרא #10 

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

osherov פותח השרשור
סמל אישי של משתמש
גורו Android
גורו Android
תגובות: 15029
הצטרף: אפריל 2007
נתן תודות: 201 פעמים
קיבל תודות: 513 פעמים

שרשור שלא נקרא #11 

טלHD,
שאלה טובה. צריך לבדוק כל אפליקצייה\משחק לגופו......

moco
סמל אישי של משתמש
גורו
גורו
תגובות: 20570
הצטרף: דצמבר 2004
נתן תודות: 198 פעמים
קיבל תודות: 349 פעמים

שרשור שלא נקרא #12 

(Y)
מאמר מעניין וברור.
משה

שלח תגובה

חזור אל “Android - אנדרויד”