Windows 10-Entwicklung - Lebenszyklus

In der Vergangenheit hat Windows eine Umgebung, in der Benutzer mehrere Anwendungen gleichzeitig ausführen können. Der Benutzer kann problemlos zwischen verschiedenen Anwendungen wechseln. Dieses Modell eignet sich nicht für Telefon- oder Tablet-Geräte, bei denen die Verwendung in der Regel auf einzelne Anwendungen ausgerichtet ist.

Eine der größten Herausforderungen für Windows 8 Store-Anwendungsprogrammierer besteht darin, den Anwendungslebenszyklus zu verwalten und zu verstehen. Wenn Sie Windows Phone-Anwendungen erstellt haben, ist vieles davon bekannt.

  • Unter Windows 8 verwaltet das Betriebssystem die Lebensdauer einer Anwendung. Während der Benutzer eine Anwendung beenden kann, öffnet der Benutzer normalerweise neue Anwendungen, ohne die laufenden Anwendungen bewusst zu beenden.

  • Die Universal Windows Platform (UWP) für Windows 10 behebt diese Probleme und bietet den Desktop-Benutzern einige coole Dinge, damit mehrere Anwendungen mit mehreren Fenstern ausgeführt werden können.

Windows-Anwendungen können auf der Basisebene in drei Zuständen vorhanden sein (siehe unten).

  • Running

  • Suspended

  • Terminate

  • Wenn ein Benutzer eine Anwendung startet / aktiviert, geht sie in die running Zustand.

  • Anwendungen können angehalten werden, wenn ein Benutzer sie nicht verwendet und sie nicht mehr im Vordergrund stehen.

  • Im angehaltenen Zustand können Anwendungen diese Anwendung entweder fortsetzen oder das Betriebssystem beenden, um Systemressourcen zurückzugewinnen.

Prozesszustandsübergang

Es ist wichtig, die Prozesszustandsübergänge in einer laufenden Anwendung zu verstehen. Wenn der Benutzer die Anwendung zum ersten Mal startet, wird der Begrüßungsbildschirm angezeigt und die Anwendung wird ausgeführt.

Der Prozess kann wie folgt erklärt werden:

  • Wenn die Anwendung angehalten wird, erhält Ihre App fünf Sekunden Zeit, um dieses angehaltene Ereignis zu verarbeiten.

  • Wenn die Anwendung angehalten wird, wird absolut kein Code ausgeführt und es werden keine Ressourcen zugewiesen.

  • Wenn es fortgesetzt wird, wird die App benachrichtigt, dass es fortgesetzt wird. Wenn Sie aus einem suspendierten Zustand kommen, müssen Sie keine Maßnahmen ergreifen.

  • Unter Speicherdruck kann Ihre Anwendung möglicherweise beendet werden.

  • Denken Sie daran, dass Sie zu diesem Zeitpunkt nicht benachrichtigt werden. Daher müssen Sie alle Einsparungen vornehmen, wenn Sie in den Status der angehaltenen Anwendung wechseln.

Wenn die Anwendung zwischen hin und her wechselt Running und Suspended Zustände, feuersperrende bzw. wiederaufnehmende Ereignisse.

Manchmal müssen Sie Daten speichern. Dann müssen Sie asynchrone Methoden wie unten gezeigt aufrufen.

Application.Current.Suspending += new SuspendingEventHandler(App_Suspending); 

async void App_Suspending(Object sender, Windows.ApplicationModel.SuspendingEventArgs e){ 
   // Create a simple setting  
   localSettings.Values["FirstName"] = fName.Text; 
   localSettings.Values["LastName"] = lName.Text; 
   localSettings.Values["Email"] = email.Text; 
}
Application.Current.Resuming += new EventHandler<Object>(App_Resuming); 

private void App_Resuming(Object sender, Object e){ 
   fName.Text = localSettings.Values["FirstName"]; 
   lName.Text = localSettings.Values["LastName"]; 
   email.Text = localSettings.Values["Email"]; 
}

Lassen Sie uns ein Beispiel untersuchen, in dem Steuerelemente hinzugefügt werden, wie in der unten angegebenen XAML-Datei gezeigt.

<Page 
   x:Class = "UWPLifeCycleDemo.MainPage" 
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
   xmlns:local = "using:UWPLifeCycleDemo" 
   xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" 
   xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" 
   mc:Ignorable = "d"> 
    
   <Grid Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}">
      <Hub Header = "Details" />
		
      <StackPanel VerticalAlignment = "Top" HorizontalAlignment = "Left" 
         Margin = "12,64,0,0">
			
         <TextBox Header = "First Name" Text = "{Binding FirstName, 
            Mode = TwoWay, UpdateSourceTrigger = PropertyChanged}" 
            Width = "200" />
				
         <TextBox Header = "Last Name" Text = "{Binding LastName, Mode = TwoWay, 
            UpdateSourceTrigger = PropertyChanged}" Width = "200" />
				
         <TextBox Header = "Email" Text = "{Binding Email, Mode = TwoWay, 
            UpdateSourceTrigger = PropertyChanged}" Width = "200" />
				
         <Button Margin = "0,12">Submit</Button>
			
      </StackPanel>
		
   </Grid>
	
</Page>

Im Folgenden ist der C # -Code angegeben, in dem die Ereignisse Suspend und Resume implementiert sind. Die aktuellen Daten werden im gespeichertsuspend event in lokalen Einstellungen und dann werden die Daten in der abgerufen resume event aus den lokalen Einstellungen wie unten gezeigt.

using System; 
using System.ComponentModel; 
using System.Runtime.CompilerServices; 

using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls; 
 
namespace UWPLifeCycleDemo {

   /// <summary> 
      /// An empty page that can be used on its own or navigated to within a Frame. 
   /// </summary> 
	
   public sealed partial class MainPage : Page{
      var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings; 
		
      public MainPage() {
         this.InitializeComponent(); 
         Application.Current.Suspending += new SuspendingEventHandler(App_Suspending); 
         Application.Current.Resuming += new EventHandler<Object>(App_Resuming); 
      } 
		
      async void App_Suspending(Object sender, Windows.ApplicationModel.SuspendingEventArgs e){
         
         // Create a simple setting 
         localSettings.Values["FirstName"] = fName.Text; 
         localSettings.Values["LastName"] = lName.Text; 
         localSettings.Values["Email"] = email.Text; 
      } 
		
      private void App_Resuming(Object sender, Object e){
         fName.Text = localSettings.Values["FirstName"]; 
         lName.Text = localSettings.Values["LastName"]; 
         email.Text = localSettings.Values["Email"]; 
      }
		
   } 
	
   public abstract class BindableBase : INotifyPropertyChanged {
      private string _FirstName = default(string);
		
      public string FirstName { 
         get { return _FirstName; } 
         set { Set(ref _FirstName, value); } 
      } 
		
      private string _LastName = default(string);
		
      public string LastName { 
         get { return _LastName; } 
         set { Set(ref _LastName, value); } 
      } 
		
      private string _Email = default(string);
		
      public string Email { 
         get { return _Email; } 
         set { Set(ref _Email, value); } 
      } 
		
      public event PropertyChangedEventHandler PropertyChanged;
		
      public void RaisePropertyChanged([CallerMemberName]string propertyName = null) {
         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
      } 
		
      public void Set<T>(ref T storage, T value, 
         [CallerMemberName()]string propertyName = null){ 

         if (!object.Equals(storage, value)){
            storage = value; 
            RaisePropertyChanged(propertyName); 
         } 
      } 
   } 
}

Wenn der obige Code kompiliert und ausgeführt wird, wird das folgende Fenster angezeigt. Schreiben Sie nun die gewünschten Informationen.

Lass uns zum gehen Lifecycle Dropdown-Menü Ereignisse und auswählen suspended. Jetzt wird Ihre Anwendung ausgesetzt und die gewünschten Informationen werden in den lokalen Einstellungen gespeichert. Siehe den Screenshot unten.

Wenn Sie nun Ihre Bewerbung fortsetzen möchten, wählen Sie die Option Resume von dem Lifecycle Events Speisekarte.

Jetzt sehen Sie, dass die gespeicherten Informationen aus den lokalen Einstellungen abgerufen werden und die Anwendung in demselben Zustand fortgesetzt wird, in dem sie angehalten wurde.