1 / 30

ALKALMAZÁS ÉLETCIKLUS

ALKALMAZÁS ÉLETCIKLUS. életciklus - alap. Elindít Főképernyőről vagy programlistából Kilép Back gombbal. ALKALMAZÁS ÉLETCIKLUS. életciklus - alap. private void Application_Launching ( object sender, LaunchingEventArgs e) { // Alkalmazás " frissen " indul }

duscha
Download Presentation

ALKALMAZÁS ÉLETCIKLUS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ALKALMAZÁS ÉLETCIKLUS életciklus - alap Elindít Főképernyőről vagy programlistából Kilép Back gombbal

  2. ALKALMAZÁS ÉLETCIKLUS életciklus - alap privatevoidApplication_Launching(object sender, LaunchingEventArgs e) { // Alkalmazás "frissen" indul } privatevoidApplication_Closing(object sender, ClosingEventArgs e) { // Alkalmazásteljesenleáll }

  3. ALKALMAZÁS ÉLETCIKLUS életciklus - eltakarva Eltakar Telefonhívás Emlékeztető Rendszer értesítése (pl alacsony akku szint) Képernyőzár* Újból látszik Ha az eltakaró elemet „elutasítjuk”

  4. ALKALMAZÁS ÉLETCIKLUS életciklus - eltakarva // Futhat e az alkalmazás a képernyőzár alatt varappIdleDetection = PhoneApplicationService.Current.ApplicationIdleDetectionMode; // Elaludhat e a telefon, ha bizonyosideignemnyúlhozzá a felhasználó varuserIdleDetection = PhoneApplicationService.Current.UserIdleDetectionMode; (App.Current.RootVisualasPhoneApplicationFrame).Obscured += (s, e) => { // el van takarva varisLocked = e.IsLocked; }; (App.Current.RootVisualasPhoneApplicationFrame).Unobscured += (s, e) => { // újbóllátszódik };

  5. ALKALMAZÁS ÉLETCIKLUS életciklus - alkalmazás váltás Deaktivál Windows gomb megnyomása Értesítésre klikkelés Az eredeti alkalmazás navigál egy másik (beépített) programra Képernyőzár* Reaktivál Az alkalmazásunkba a Back gomb által térünk vissza (visszalépés vagy alkalmazásváltás)

  6. ALKALMAZÁS ÉLETCIKLUS passzív multitask Deaktiválás Alkalmazás állapotának mentése Memóriába Háttértárra (Isolated Storage)

  7. ALKALMAZÁS ÉLETCIKLUS passzív multitask // Deaktiváláseseményalkalmazásszinten privatevoidApplication_Deactivated(object sender, DeactivatedEventArgs e) { // Mentés State Dictionary-beésIsolatedStorage-ba(Fájlok, Beállítások, Adatbázis) } // "Deaktiválás" eseményoldalszinten protectedoverridevoidOnNavigatingFrom(System.Windows.Navigation.NavigatingCancelEventArgs e) { // Mentés State Dictionary-beésIsolatedStorage-ba(Fájlok, Beállítások, Adatbázis) base.OnNavigatingFrom(e); }

  8. ALKALMAZÁS ÉLETCIKLUS passzív multitask Reaktiválás Alvó állapotból (Dormant) Alkalmazásunk teljes mértékben meg lett őrizve a memóriában Nincs tennivaló Kiássuk a sírból (Tombstoned) Alkalmazásunknak csak egy kijelölt része lett megőrizve a memóriában State objektum segítségével kell visszaállítani az állapotot

  9. ALKALMAZÁS ÉLETCIKLUS passzív multitask Reaktiválás Teljes emlékezetvesztésből Alkalmazásunk állapotát a rendszer nem őrizte meg Még mindig visszaállítható az állapot, amennyiben deaktiváláskor a háttértárra is mentettünk Ugyan lassabb, de még a telefon kikapcsolása esetén is megmaradnak beállításaink

  10. ALKALMAZÁS ÉLETCIKLUS passzív multitask // Aktiváláseseményalkalmazásszinten privatevoidApplication_Activated(objectsender, ActivatedEventArgse) { bool isAppInstancePreserved= e.IsApplicationInstancePreserved; } // "Aktiválás" eseményoldalszinten protectedoverridevoidOnNavigatedTo(System.Windows.Navigation.NavigationEventArgse) { base.OnNavigatedTo(e); varstartupMode = PhoneApplicationService.Current.StartupMode; // Activate / Launch }

  11. ALKALMAZÁSÉLETCIKLUS aktív multitask Alszik Multitask Háttér ügynökök Push értesítések

  12. MULTITASK háttér ügynökök – általános Periódikus Mikor fut? 30 percenként Limitált erőforrások 5% CPU, 6MB RAM Meddig fut? 25 másodpercig Erőforrás-igényes Mikor fut? Ha a telefon töltőn van ÉS Ha nem mobilnetet használ ÉS Ha nem áll minimumon az akku ÉS Ha nincs aktív hívás ÉS Ha a telefon képernyője le van zárva Meddig fut? 10 percig

  13. MULTITASK háttér ügynökök – fájlátvitel

  14. MULTITASK háttér ügynökök – audió Mindenhonnan képes lejátszani... Helyi tartalom Internetes tartalom Internetes streamelt tartalom ...még HTML5-ből is A böngészőből indított audió anyagot ez játsza le automatikusan Használhatjuk az OS vezérlőit Hangerő Lejátszás / Megállítás Előre / Hátra léptetés

  15. MULTITASK értesítések – értesítősáv A leghatékonyabb módja az értesítésnek Csináljon a felhasználó bármit is a telefonján, az értesítésről mindig tudni fog

  16. MULTITASK PushNotification – Toast – Phone voidSubscribeToPushNotificationChannel(stringchannelName) { HttpNotificationChannelpushChannel; // (1) Létezik e a csatorna? pushChannel = HttpNotificationChannel.Find(channelName); if (pushChannel == null) { // (2/a) Nemlétezik -> Létrehozzuk pushChannel = newHttpNotificationChannel(channelName); pushChannel.ChannelUriUpdated += PushChannel_ChannelUriUpdated; pushChannel.ErrorOccurred += PushChannel_ErrorOccurred; pushChannel.ShellToastNotificationReceived += PushChannel_ShellToastNotificationReceived; pushChannel.Open(); pushChannel.BindToShellToast(); }

  17. MULTITASK PushNotification – Toast – Phone else { // (2/b) Létezik if (pushChannel.ChannelUri == null) { // (2/c) Létezik a csatorna, de nem tudjuk kiolvasni az URI-t pushChannel.UnbindToShellToast(); pushChannel.Close(); SubscribeToPushNotificationChannel(channelName); return; } // Feliratkozunkazeseményekre pushChannel.ChannelUriUpdated += PushChannel_ChannelUriUpdated; pushChannel.ErrorOccurred += PushChannel_ErrorOccurred; pushChannel.ShellToastNotificationReceived += PushChannel_ShellToastNotificationReceived; } varchannelURI = pushChannel.ChannelUri; }

  18. MULTITASK PushNotification – Toast – Phone voidPushChannel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e) { varchannelURI = e.ChannelUri; } voidPushChannel_ErrorOccurred(object sender, NotificationChannelErrorEventArgs e) { varerrorType = e.ErrorType; varerrorMessage = e.Message; varerrorCode = e.ErrorCode; varerrorAdditionalData = e.ErrorAdditionalData; }

  19. MULTITASK PushNotification – Toast – Phone voidPushChannel_ShellToastNotificationReceived(object sender, NotificationEventArgs e) { StringBuilder message = newStringBuilder(); stringrelativeUri = string.Empty; message.AppendFormat("Received Toast {0}:\n", DateTime.Now.ToShortTimeString()); foreach (string key ine.Collection.Keys) { message.AppendFormat("{0}: {1}\n", key, e.Collection[key]); if (string.Compare( key, "wp:Param", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.CompareOptions.IgnoreCase) == 0) { relativeUri = e.Collection[key]; } } }

  20. MULTITASK PushNotification – Toast – Server stringsubscriptionUri = TextBoxUri.Text.ToString(); HttpWebRequestsendNotificationRequest = (HttpWebRequest)WebRequest.Create(subscriptionUri); sendNotificationRequest.Method = "POST"; // Toast üzenet "teste" stringtoastMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<wp:Notificationxmlns:wp=\"WPNotification\">" + "<wp:Toast>" + "<wp:Text1>" + TextBoxTitle.Text.ToString() + "</wp:Text1>" + "<wp:Text2>" + TextBoxSubTitle.Text.ToString() + "</wp:Text2>" + "<wp:Param>/Page2.xaml?NavigatedFrom=Toast Notification</wp:Param>" + "</wp:Toast> " + "</wp:Notification>"; byte[] notificationMessage = Encoding.Default.GetBytes(toastMessage);

  21. MULTITASK PushNotification – Toast – Server sendNotificationRequest.ContentLength= notificationMessage.Length; sendNotificationRequest.ContentType = "text/xml"; sendNotificationRequest.Headers.Add("X-WindowsPhone-Target", "toast"); sendNotificationRequest.Headers.Add("X-NotificationClass", "2"); using (StreamrequestStream = sendNotificationRequest.GetRequestStream()) { requestStream.Write(notificationMessage, 0, notificationMessage.Length); } HttpWebResponse response = (HttpWebResponse)sendNotificationRequest.GetResponse(); stringnotificationStatus = response.Headers["X-NotificationStatus"]; stringnotificationChannelStatus = response.Headers["X-SubscriptionStatus"]; stringdeviceConnectionStatus = response.Headers["X-DeviceConnectionStatus"]; TextBoxResponse.Text = notificationStatus + " | " + deviceConnectionStatus + " | " + notificationChannelStatus;

  22. MULTITASK BackgroundNotification – Toast ShellToast notification = newShellToast(); notification.Title = "Title"; notification.Content = "Content"; notification.NavigationUri = newUri("MainPage.xaml?message=Hello World", UriKind.Relative); notification.Show();

  23. MULTITASK értesítések – élő csempék A leglátványosabb módja az értesítésnek Egy alkalmazáshoz több csempe is tartozhat Minden csempének van elő –és hátlapja

  24. MULTITASK ScheduledNotification – Tile ShellTileSchedule notification = newShellTileSchedule(); notification.Interval = UpdateInterval.EveryHour; // EveryDay, EveryWeek, EveryMonth notification.MaxUpdateCount = 10; // 0 -> végtelenségigmegy notification.Recurrence = UpdateRecurrence.Interval; // OneTime notification.StartTime = DateTime.Now; notification.RemoteImageUri = newUri("http://<IMAGE_URL>"); notification.Start(); // Stop()

  25. MULTITASK PushNotification – Tile Nagyon hasonló a Toast-hoz Csak ezt nem lehet appon belül elkapni

  26. MULTITASK BackgroundNotification – Tile // Másodlagoscsempelétrehozása ShellTile.Create(newUri("MainPage.xaml?message=Secondary Tile"), newStandardTileData { Title = "Front", Count = 0, //BackgroundImage = new Uri("<Background Image URI>"), BackTitle = "Back", BackContent = "Content" //BackBackgroundImage = new Uri("<Back Background Image URI>") });

  27. MULTITASK BackgroundNotification – Tile // Csempéklistázása foreach (var tile inShellTile.ActiveTiles) { varnavigationURI = tile.NavigationUri; // lényegébenezaz ID // Csempe frissítése (az elsődleges csempe az első) tile.Update(newStandardTileData { Title = "Front", Count = 0, BackgroundImage = newUri("<Background Image URI>"), BackTitle = "Back", BackContent = "Content", BackBackgroundImage = newUri("<Back Background Image URI>") }); // Csempetörlése tile.Delete(); }

  28. MULTITASK értesítések – figyelmeztetés Figyelmeztetés és emlékeztető Lényegében az értesítősáv időzített verziója Előre beállított időpontban kapjuk meg

  29. MULTITASK ScheduledNotifications Reminderreminder = newReminder("Sample Reminder"); reminder.BeginTime = DateTime.Now; reminder.ExpirationTime = DateTime.Now + TimeSpan.FromDays(14); reminder.RecurrenceType = RecurrenceInterval.Daily; // Weekly, Monthly, EndOfMonth, Yearly, None reminder.Title = "Title"; reminder.Content = "Content"; reminder.NavigationUri = newUri("MainPage.xaml?message=From Reminder"); ScheduledActionService.Add(reminder); Alarmalarm = newAlarm("Sample Alarm"); alarm.BeginTime = DateTime.Now; alarm.ExpirationTime = DateTime.Now + TimeSpan.FromDays(14); alarm.RecurrenceType = RecurrenceInterval.Daily; // Weekly, Monthly, EndOfMonth, Yearly, None alarm.Title = "Title"; alarm.Content = "Content"; alarm.Sound = newUri("/Ringtones/Ring01.wma", UriKind.Relative); ScheduledActionService.Add(alarm);

  30. MULTITASK értesítések – paraméterezhetőség A webes QueryString-hez hasonló megoldás Az értesítésekre kattintva az alkalmazás a megfelelő oldalon és a megfelelő állapotban tud elindulni

More Related