‏הצגת רשומות עם תוויות אנדרואיד. הצג את כל הרשומות
‏הצגת רשומות עם תוויות אנדרואיד. הצג את כל הרשומות

יום שבת, 18 בספטמבר 2010

תעצרו את העולם...

לא בכל יום, מסתכל אדם על סביבתו ומגלה כי העולם שהוא מכיר משתנה. לי זה קרה בשבוע שעבר. בזמנו, הסברתי על אפליקציות היברידיות. באותו הכנס, הוצגו נתונים שנאספו לאחרונה, לפיהם מאז יציאתם לשוק של מכשירי ה-IPhone והאנדרואיד הראשונים, עלתה תעבורת המידע (Data) דרך מכשירים סלולריים במאות אחוזים, כאשר מכשירים אלו אחראים, למרות נפח השוק המצומצם שלהם, לכתשעים אחוזים מהתעבורה.הפרויקט הראשון אותו הובלתי בעבודתי הנוכחים היה פיתוח של אפליקציית מסרים מיידים. השקעתי מאמץ רב בפיתוח מודל שישמור את נתוני המערכת (Data Model) כך שלאחר שנכנסנו למערכת, האפליקציה תקבל רק עדכונים על שינויים. כמו כן, השקענו מאמץ בהפחתת התעבורה של האפליקציה למינימום. תעבורה היא דבר יקר, אמר לנו הלקוח, ואנחנו לא רוצים להעמיס על המשתמש עלויות לא הכרחיות.
כל זה השתנה. התקשורת הפכה בשנים לזולה ומהירה הרבה יותר. לאחרונה, היה עלי לתכנן (בקווים כלליים) מגוון של אפליקציות שונות. פתאום הגיעה לי ההארה - הן כולן דומות באופן מפחיד, ושונות מאות מהאפליקציות שתכננתי לפני שלוש שנים.
בעבר, כללה אפליקציה סלולרית שמשתמשת בשרת מספר רכיבים: היה רכיב של תקשורת שיודע לשלוח ולקבל נתונים מהשרת. היה את רכיב ניהול הנתונים (שוב אותו Data Model), כמו כן היה אוסף של רכיבי ממשק למשתמש (UI), שאפשר הצגה בדרכים אלו או אחרות של נתונים למשתמש, ועל כולם ניצח רכיב של ניהול האפליקציה - הוא זה שמימש את הלוגיקה העסקית של האפליקציה.
האפליקציות החדשות שונות מאוד. מדובר באוסף של מסכי משתמש שכל אחד מהם מציג נתוני שאילתה שמגיעים מהשרת. כיוון שהתקשורת מהירה מספיק, הרי שזמן התגובה מהיר מספיק ע"מ לאפשר חווית משתמש טובה. במצב כזה, אין צורך בשמירת נתונים באפליקציה - כל מסך מקושר לשאילתה הרלוונטית, ובהגעת הנתונים הם מוצגים. השלב הבא הוא העברת ניהול האפליקציה למסכים - בדומה לאפליקציית רשת שבה המעבר בין מסכים נקבע ע"י קישורים. בסופו של דבר, מה שמבדיל אפליקציות כאלו זו מזו הוא העיצוב הפונקציונלי והיישום של ממשק המשתמש. מי שיישם ממשק משתמש נוח ומגניב יזכה להצלחה. נדרשת הרבה פחות השקעה בדרישות הלא-פונקציונליות של האפליקציה.
התהליך הזה, שמונע ע"י נגישות רבה לרשת ונפח תעבורה גדול הרבה יותר, מאפשר להפוך את פיתוח האפליקציות הסלולריות לפשוט הרבה יותר. האפליקציות בסך הכל משקפות באמצעות ממשק המשתמש את הנתונים שמגיעים מהשרת. וכאשר האפליקציות פשוטות, לא צריך תואר שני במדעי המחשב ע"מ לפתח אפליקציות כאלו - הן בעצם אפליקציות רשת במסווה - מן סוג של אפליקציה היברידית במסווה.
על ההיבטים העסקיים של שינויי כזה, אני אדון כשאספר לכם על "העולם הוא שטוח" - ספר שכתב תומאס פרידמן, מהפובליציסטים המשפיעים בעולם, על הגלובליזציה.

יום חמישי, 4 במרץ 2010

בואו נעשה פעילות

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

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

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

יום שישי, 15 בינואר 2010

מה הכוונה באנדרואיד?

בפעם שעברה סיפרתי לכם על הדילמה של אנדרואיד - מצד אחד, כל אפליקציה רצה ב-Process משלה, ומצד שני ניתן לשתף אפליקציות אחרות ולאפשר להן להשתמש ברכיבים שכתבת. הדרך לעשות את זה היא באמצעות אובייקטים מסוג Intent.
ל-Intent (שאני אקרא לו גם כוונה) יש מספר חלקים, כשהעיקריים הם: פעולה, קטגוריה, מידע (Data), וסוג המידע (Mime-Type). הכוונה היא האובייקט שעובר במערכת ולפיו מערכת ההפעלה של אנדרואיד מחליטה אילו רכיבים להפעיל. ההחלטה הזו מתבצעת לפי ההתאמה של ה-Intent ל-Intent Filter.
Intent Filter הוא הדרך שבה רכיב כלשהו מספר למערכת ההפעלה אילו כוונות אמורות להפעיל אותו. מוגדרות בו הפעולות שהרכיב יכול לבצע, כמו VIEW, עבור רכיבים שמאפשרים לנו לצפות בתוכן מסוג מסוים - סרטים, תמונות, קבצי שמע, או PICK, עבור רכיבים שמפשרים לנו לבחור מתוך התוכן הנ"ל. הפעלה של האפליקציה מתוך תפריט האפליקציות גם היא פעולה מסוג מסוים. פרט לפעולה אנחנו יכולים להגדיר גם את סוג התוכן שעבורו הרכיב פועל ואת ההרשאות שדרושות עבור הפעלת הרכיב.
כאשר משתמשים בכוונה, מערכת ההפעלה בודקת בכל הרכיבים הרשומים אצלה, אלו רכיבים הגדירו Intent Filter שמתאים לכוונה, ומפעיל את הרכיב/ים המתאים. יש מספר דרכים להפעיל רכיבים באנדרואיד: Broadcast, התחלת שירות (Service)  והתחלת פעילות (Activity).
כוונה שמשודרת בשידור רחב (Broadcast) משודרת לכל הרכיבים מסוג Broadcast Receiver (נדון בו בעתיד) שמוגדרים במערכת ושקיים עבורם Intent Filter מתאים.
כוונה שמשודרת כהתחלת שירות, תפנה ל-Service (גם בו נדון בעתיד) שקיים במערכת ושה-Intent Filter שלו מתאים ביותר לכוונה ששודרה.
כוונה שמשודרת כהתחלת פעילות (Activity), תמצא את הפעילות המתאימה ביותר לביצוע הכוונה ותתחיל אותה. במידה ויותר מפעילות אחת מתאימה, מערכת ההפעלה תשאל את המשתמש באיזו פעילות הוא מעוניין להשתמש. ניתן להתחיל פעילות בשתי דרכים: על מנת שהיא תרוץ, וע"מ לקבל ערך החזר ביציאה ממנה.
יש עוד ניואנסים רבים לשימוש בכוונות באנדרואיד, אולם העיקר פרוס פה לפניכם. בפוסט הבא, נתחיל לדון ברכיבים השונים של האפליקציה - Activity, Service, Broadcast Receiver ו-Content Provider.

יום רביעי, 23 בדצמבר 2009

אנדרואיד - מתחילים

לפני שבועות מספר, כתבתי פה על אנדרואיד, מערכת ההפעלה החדשה לטלפונים סלולריים (ולא רק לטלפונים) מבית גוגל. היום אני מתכוון להסביר, במה פיתוח אפליקציות לאנדרואיד שונה כל-כך בפיתוח אפליקציות למערכות הפעלה אחרות. הפוסט הזה הולך להיות קצת טכני, ולא ידבר למי שאין לו רקע בפיתוח תוכנה - עמכם הסליחה.
אחד היתרונות המרכזיים של אנדרואיד, הוא שהמערכת מאפשרת לי שימוש קל ונכון ברכיבי תוכנה שאינם שייכים לאפליקציה שלי. אחד המאפיינים המרכזים של אנדרואיד, הוא שכל אפליקציה רצה על Virtual Machine משלה ב-Process נפרד, כך שהיא לגמרי לא מודעת לקיומן של אפליקציות אחרות, וודאי שאינה יכולה לחלוק עימן מידע. דומה כי שני המשפטים הקודמים שכתבתי אינם מתיישבים יחדיו היטב, אולם מערכת ההפעלה של אנדרואיד מציעה סט שלם של כלים על מנת לאפשר שיתוף מוגן וקל בין אפליקציות. בפוסט זה ובפוסטים הבאים בנושא, נכיר את הכלים הללו. הבה נתחיל אם כן.
מבנה אפליקציה באנדרואיד, שונה משאר האפליקציות שאולי הכרתם בעבר. בניגוד לרב המוחלט של תוכנות שכתבתם, לאפליקציה באנדרואיד אין פונקצית main. אין נקודת כניסה בודדת לאפליקציה שממנה הכל מתחיל. במקום זאת, יש לנו אוסף של קומפוננטות (מעתה אמור רכיבים) שמערכת ההפעלה יודעת לתקשר איתם. על הרכיבים אנחנו מצהירים בקובץ שנקרא AndroidManifest.
זהו קובץ XML שמכיל את הגדרות האפליקציה, כגון שם, סמליל (אייקון), הרשאות שהאפליקציה דורשת, הרשאות שהיא משתמשת בהם, ועוד. כמו כן, מכיל הקובץ את ההגדרות של כל רכיב שמערכת ההפעלה יכולה להכיר באפליקציה. ישנם 4 רכיבים כאלו: Activity, Service, ContentProvider ו-BroadcastReceiver. עבור כל רכיב, מוגדר כיצד מערכת ההפעלה, או יותר נכון, כיצד רכיבים אחרים באפליקציות אחרות, יכולים להשתמש בשירותיו. הדרך העיקרית להשתמש בשירותי הרכיבים היא באמצעות אובייקט ה-Intent (בתור בוגר בפילוסופיה של השפה, אני חושב שזו בחירת שם מאוד חיננית - אתה מצהיר מה אתה מתכוון לעשות, ורכיבים שמצהירים שהם מממשים את הכוונה שלך, נקראים לעזרתך). על אובייקט זה, נדבר בפוסט הבא בנושא.

יום שבת, 14 בנובמבר 2009

אבל מה זה אנדרואיד?

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

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

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

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