Windows 10 UWP C#, wolne działanie przycisku wstecz

0

Witam,

Zrobiłem prostą aplikację Windows Universal Application, do zapisywania <ort>nie dużej</ort> ilości sprzedawanych rzeczy. Na PC z Windows 10 aplikacja działa normalnie. Jednak gdy uruchamiam aplikację na mojej lumii, aplkacja po krótkiej chwili zacina znacznie. Zauważyłem, że może to mieć związek z niedawno dodaną obsługą wbudowanego przycisku wstecz w Windows 10 Mobile.
Kiedy powtarzam kilka razy tą samą operację: otwórz nową kartę -> wróć, aplikacja wyraźnie zaczyna spowalniać wraz z upływem czasu. Dla testu dodałem swój własny przycisk wstecz przy stronach i obsłużyłem wracanie na sztywno. Wtedy aplikacja śmiga fajnie.

W załączniku przesyłam cały projekt, wraz z bazą sqlite. Kompilowane na VS 2015.

P.S. Proszę się nie przerazić jakością kodu:) Będę wdzięczny za uwagi i pomoc.

1

Nie używaj Frame.Navigate(), używaj Frame.GoBack() do zrealizowania "cofania się" w obsłudze zdarzenia BackKeyPress. Przynajmniej mam wrażenie, że to powoduje u ciebie problem: każdorazowa nawigacja do strony tworzy tą stronę na nowo, stąd zużycie RAM-u ciągle rośnie.

967af840b1.png

0

Hej, jednak nie wszystko jeszcze gra. Teraz owszem aplikacja szybciej działa, ale nie zawsze wraca do "nadrzędnej" strony tylko do poprzednio wyświetlonej. Ja poprzednio wzorowałem się na tym rozwiązaniu:
http://www.wintellect.com/devcenter/jprosise/handling-the-back-button-in-windows-10-uwp-apps

A przy każdej stronie miałem dodany fragment:

            SystemNavigationManager.GetForCurrentView().BackRequested += (s, e) =>
            {
                // TODO: Go back to the previous page
                Frame.Navigate(typeof(tutajstrona);
            };

Teraz po prostu usunąłem cały ten fragment i aplikacja szybko działa, ale chyba jeszcze coś muszę zmodyfikować/dodać.

1

Teraz owszem aplikacja szybciej działa, ale nie zawsze wraca do "nadrzędnej" strony tylko do poprzednio wyświetlonej.

Więc... działa jak powinna? ;-) Na serio nie pamiętam jakie są aktualne wytyczne, ale kiedyś założenie było takie, że Wstecz zawsze powinien wracać o jeden poziom do tyłu.
Możesz jeszcze spróbować kombinować z this.Frame.BackStack.Remove(this.Frame.BackStack.LastOrDefault());, które usuwa poprzedni element ze stosu powrotu, albo może usuwać wszystkie elementy ze stosu powrotu tak, aby wracać do początku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1