locked
backgorund task on windows phone RRS feed

  • שאלה

  • שלום לכולם

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

    בעקבות כך יש לי מספר שאלות

    א. הבנתי שיש שתי דרכים 1. background task  והדרך השנייה Scheduled, אז קודם כל מה ההבדל בינהם ומה יותר מתאים לצורך שלי

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

    התהליך שעשיתי הוא:

    1. יצרתי פרוייקט מסוג Scheduled וצירפתי את ה reference לקוד שלי

    2.הוספתי את הקוד הזה

    PeriodicTask periodicTask = new PeriodicTask(taskName);
                periodicTask.Description = "take location";
                try
                {
                    //remove old 
                    PeriodicTask oldTask = ScheduledActionService.Find(taskName) as PeriodicTask;
                    if (oldTask != null)
                        ScheduledActionService.Remove(taskName);
     
     
                    ScheduledActionService.Add(periodicTask);
     
                    ScheduledActionService.LaunchForTest(taskName, TimeSpan.FromSeconds(3));
                    MessageBox.Show("Open the background agent success");

    3. ב ScheduledAgent ב  INVOKE

    protected override void OnInvoke(ScheduledTask task)
            {
                if (task.Name.Equals("PeriodicTaskDemo"StringComparison.OrdinalIgnoreCase))
                {   
                    ShellToast toast = new ShellToast();
                    Mutex mutex = new Mutex(true"ScheduledAgentData");
                    mutex.WaitOne();
                    IsolatedStorageSettings setting = IsolatedStorageSettings.ApplicationSettings;
                    toast.Title = setting["ScheduledAgentData"].ToString();
                    mutex.ReleaseMutex();
                    toast.Content = "Task Running";
                    toast.Show();
                }
                ScheduledActionService.LaunchForTest(task.Name, TimeSpan.FromSeconds(3));
                NotifyComplete();
            }

    והתוצאה היא, שנראה שהמשימה נרשמת ועובדת ברקע, אבל בפועל כלום

    היכן היא הטעות שלי

    האמת שהשאלה שעולה לי זה מהיכן ה TASK מכיר את ה reference שהוספתי אולי כאן הבעיה.

    שאלה נוספת: לגבי ה notification האם זה עובד רק דרך שרתי מיקרוסופט ? או אפשר גם משהו בדומה למה שיש ב WCF מצב של HttpDual.

    ואיך אני מייצר את ה Certificate במידה וחייבים (יש לי חשבון מפתח אבל לא הבנתי בדיוק איך עושים את זה)

    תודה רבה מראש

    רק לציין שזה נועד ל WP8.0 בלבד בשלב הזה

    יום רביעי 28 מאי 2014 23:50

תשובות

  • היי,

    background task או scheduled task זה אותו דבר, יש בלבול קטן במושגים, הפער בין ארכיטקטורה למימוש :)

    בגדול, אתה צריך ליצור background task בעזרת PeriodicTask (שיורש מהמחלקה ScheduleTask).

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

    http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh202942(v=vs.105).aspx

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

    בנוסף, קוד שרץ ע"י scheduled task מוגבל ביכולות שלו לגשת למשאבי מערכת מסויימים. למשל אין אפשרות לעדכן UI (כי אין UI...). בהקשר ל- GPS, ניתן לקחת מיקום אחרון ולא עדכני נוכחי, וכו'.

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

    http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj681691(v=vs.105).aspx

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

    בברכה,

    תומר שמם

    CodeValue


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    יום ראשון 01 יוני 2014 12:54
    מנחה דיון
  • קודם כל תודה על התגובה

    דבר שני ניסיתי גם את ה background task והוא די מאכזב, מצד ה 30 דקות (שאר הדברים הוא נראה די בסדר ( במיוחד ה trigger))

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

    במסקנה הסופית נשארתי עם ה Schedule task. והטעות שהייתה לי זה

    <ExtendedTask Name="ScheduleTask">
            <BackgroundServiceAgent Specifier="ScheduledTaskAgent" Name="ScheduledTaskAgent1" Source="ScheduledTaskAgent1" Type="ScheduledTaskAgent1.ScheduledAgent" />
          </ExtendedTask>

    שהיה צריך להוסיף ב

    WMAppManifest.xml

    לגבי שאר השאלות אני אשאל בשירשור נפרד (אחרי החג) למען הסדר הטוב

    חג שמח לכולם

    • סומן כתשובה על-ידי yit770 שבת 07 יוני 2014 23:13
    יום שלישי 03 יוני 2014 17:40

כל התגובות

  • אין אפילו תשובה חלקית ??

    יום חמישי 29 מאי 2014 10:53
  • הי. בקרוב מומחי הקהילה יענו לך. אם בינתיים יש עדכון בסטטוס השאלה אנא עדכן אותנו.

    תודה.


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

    יום ראשון 01 יוני 2014 11:15
  • היי,

    background task או scheduled task זה אותו דבר, יש בלבול קטן במושגים, הפער בין ארכיטקטורה למימוש :)

    בגדול, אתה צריך ליצור background task בעזרת PeriodicTask (שיורש מהמחלקה ScheduleTask).

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

    http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh202942(v=vs.105).aspx

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

    בנוסף, קוד שרץ ע"י scheduled task מוגבל ביכולות שלו לגשת למשאבי מערכת מסויימים. למשל אין אפשרות לעדכן UI (כי אין UI...). בהקשר ל- GPS, ניתן לקחת מיקום אחרון ולא עדכני נוכחי, וכו'.

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

    http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj681691(v=vs.105).aspx

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

    בברכה,

    תומר שמם

    CodeValue


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    יום ראשון 01 יוני 2014 12:54
    מנחה דיון
  • קודם כל תודה על התגובה

    דבר שני ניסיתי גם את ה background task והוא די מאכזב, מצד ה 30 דקות (שאר הדברים הוא נראה די בסדר ( במיוחד ה trigger))

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

    במסקנה הסופית נשארתי עם ה Schedule task. והטעות שהייתה לי זה

    <ExtendedTask Name="ScheduleTask">
            <BackgroundServiceAgent Specifier="ScheduledTaskAgent" Name="ScheduledTaskAgent1" Source="ScheduledTaskAgent1" Type="ScheduledTaskAgent1.ScheduledAgent" />
          </ExtendedTask>

    שהיה צריך להוסיף ב

    WMAppManifest.xml

    לגבי שאר השאלות אני אשאל בשירשור נפרד (אחרי החג) למען הסדר הטוב

    חג שמח לכולם

    • סומן כתשובה על-ידי yit770 שבת 07 יוני 2014 23:13
    יום שלישי 03 יוני 2014 17:40