Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

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

Hasonló előadás


Az előadások a következő témára: "ALKALMAZÁS ÉLETCIKLUS életciklus - alap Nem fut ElindítFutKilép Elindít Főképernyőről vagy programlistából Kilép Back gombbal."— Előadás másolata:

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

2 ALKALMAZÁS ÉLETCIKLUS életciklus - alap private void Application_Launching(object sender, LaunchingEventArgs e) { // Alkalmazás "frissen" indul } private void Application_Closing(object sender, ClosingEventArgs e) { // Alkalmazás teljesen leáll }

3 ALKALMAZÁS ÉLETCIKLUS életciklus - eltakarva FutEltakarFut Újból látszik 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 var appIdleDetection = PhoneApplicationService.Current.ApplicationIdleDetectionMode; // Elaludhat e a telefon, ha bizonyos ideig nem nyúl hozzá a felhasználó var userIdleDetection = PhoneApplicationService.Current.UserIdleDetectionMode; (App.Current.RootVisual as PhoneApplicationFrame).Obscured += (s, e) => { // el van takarva var isLocked = e.IsLocked; }; (App.Current.RootVisual as PhoneApplicationFrame).Unobscured += (s, e) => { // újból látszódik };

5 ALKALMAZÁS ÉLETCIKLUS életciklus - alkalmazás váltás FutDeaktiválAlszikReaktivál 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 FutDeaktiválAlszikReaktivál 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ás esemény alkalmazás szinten private void Application_Deactivated(object sender, DeactivatedEventArgs e) { // Mentés State Dictionary-be és IsolatedStorage-ba (Fájlok, Beállítások, Adatbázis) } // "Deaktiválás" esemény oldal szinten protected override void OnNavigatingFrom(System.Windows.Navigation.NavigatingCancelEventArgs e) { // Mentés State Dictionary-be és IsolatedStorage-ba (Fájlok, Beállítások, Adatbázis) base.OnNavigatingFrom(e); }

8 ALKALMAZÁS ÉLETCIKLUS passzív multitask FutDeaktiválAlszikReaktivál 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 FutDeaktiválAlszikReaktivál 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ás esemény alkalmazás szinten private void Application_Activated(object sender, ActivatedEventArgs e) { bool isAppInstancePreserved = e.IsApplicationInstancePreserved; } // "Aktiválás" esemény oldal szinten protected override void OnNavigatedTo(System.Windows.Navigation. NavigationEventArgs e) { base.OnNavigatedTo(e); var startupMode = PhoneApplicationService.Current.StartupMode; // Activate / Launch }

11 ALKALMAZÁS ÉLETCIKLUS aktív multitask FutDeaktiválAlszikReaktivál 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 Méretbeli limitek Feltöltésnél 5MB Letöltésnél 20MB – mobilneten 100MB – WiFi-n akkumulátorról Mennyiségbeli limitek Alkalmazásra 5 transzfer a sorban Telefonra 500 transfer a sorban 2 transzfer futhat párhuzamosan Sebességbeli limitek 3G esetén Minimum 50 Kbps WiFi / USB esetén Minimum 100 Kbps

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 IdőzítettHáttérbőlFelhőből (Push) ●● 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 void SubscribeToPushNotificationChannel(string channelName) { HttpNotificationChannel pushChannel; // (1) Létezik e a csatorna? pushChannel = HttpNotificationChannel.Find(channelName); if (pushChannel == null) { // (2/a) Nem létezik -> Létrehozzuk pushChannel = new HttpNotificationChannel(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; } // Feliratkozunk az eseményekre pushChannel.ChannelUriUpdated += PushChannel_ChannelUriUpdated; pushChannel.ErrorOccurred += PushChannel_ErrorOccurred; pushChannel.ShellToastNotificationReceived += PushChannel_ShellToastNotificationReceived; } var channelURI = pushChannel.ChannelUri; }

18 MULTITASK PushNotification – Toast – Phone void PushChannel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e) { var channelURI = e.ChannelUri; } void PushChannel_ErrorOccurred(object sender, NotificationChannelErrorEventArgs e) { var errorType = e.ErrorType; var errorMessage = e.Message; var errorCode = e.ErrorCode; var errorAdditionalData = e.ErrorAdditionalData; }

19 MULTITASK PushNotification – Toast – Phone void PushChannel_ShellToastNotificationReceived(object sender, NotificationEventArgs e) { StringBuilder message = new StringBuilder(); string relativeUri = string.Empty; message.AppendFormat("Received Toast {0}:\n", DateTime.Now.ToShortTimeString()); foreach (string key in e.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 string subscriptionUri = TextBoxUri.Text.ToString(); HttpWebRequest sendNotificationRequest = (HttpWebRequest)WebRequest.Create(subscriptionUri); sendNotificationRequest.Method = "POST"; // Toast üzenet "teste" string toastMessage = " " + " " + " " + TextBoxTitle.Text.ToString() + " " + " " + TextBoxSubTitle.Text.ToString() + " " + " /Page2.xaml?NavigatedFrom=Toast 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 (Stream requestStream = sendNotificationRequest.GetRequestStream()) { requestStream.Write(notificationMessage, 0, notificationMessage.Length); } HttpWebResponse response = (HttpWebResponse)sendNotificationRequest.GetResponse(); string notificationStatus = response.Headers["X-NotificationStatus"]; string notificationChannelStatus = response.Headers["X-SubscriptionStatus"]; string deviceConnectionStatus = response.Headers["X-DeviceConnectionStatus"]; TextBoxResponse.Text = notificationStatus + " | " + deviceConnectionStatus + " | " + notificationChannelStatus;

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

23 MULTITASK értesítések – élő csempék IdőzítettHáttérbőlFelhőből (Push) ●●● 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 = new ShellTileSchedule(); notification.Interval = UpdateInterval.EveryHour; // EveryDay, EveryWeek, EveryMonth notification.MaxUpdateCount = 10; // 0 -> végtelenségig megy notification.Recurrence = UpdateRecurrence.Interval; // OneTime notification.StartTime = DateTime.Now; notification.RemoteImageUri = new Uri("http:// "); 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ásodlagos csempe létrehozása ShellTile.Create(new Uri("MainPage.xaml?message=Secondary Tile"), new StandardTileData { Title = "Front", Count = 0, //BackgroundImage = new Uri(" "), BackTitle = "Back", BackContent = "Content" //BackBackgroundImage = new Uri(" ") });

27 MULTITASK BackgroundNotification – Tile // Csempék listázása foreach (var tile in ShellTile.ActiveTiles) { var navigationURI = tile.NavigationUri; // lényegében ez az ID // Csempe frissítése (az elsődleges csempe az első) tile.Update(new StandardTileData { Title = "Front", Count = 0, BackgroundImage = new Uri(" "), BackTitle = "Back", BackContent = "Content", BackBackgroundImage = new Uri(" ") }); // Csempe törlése tile.Delete(); }

28 MULTITASK értesítések – figyelmeztetés IdőzítettHáttérbőlFelhőből (Push) ● 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 Reminder reminder = new Reminder("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 = new Uri("MainPage.xaml?message=From Reminder"); ScheduledActionService.Add(reminder); Alarm alarm = new Alarm("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 = new Uri("/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


Letölteni ppt "ALKALMAZÁS ÉLETCIKLUS életciklus - alap Nem fut ElindítFutKilép Elindít Főképernyőről vagy programlistából Kilép Back gombbal."

Hasonló előadás


Google Hirdetések