Windows 10 Geliştirme - Yaşam Döngüsü

Geçmişte Windows, kullanıcıların aynı anda birden fazla uygulamayı çalıştırabildikleri bir ortama sahiptir. Kullanıcı farklı uygulamalar arasında kolaylıkla geçiş yapabilir. Bu model, kullanımın genellikle tek uygulama odaklı olduğu telefon veya tablet cihazlarda iyi çalışmaz.

Windows 8 Mağazası uygulama programcılarının karşılaştığı en önemli zorluklardan biri, uygulama yaşam döngüsünü yönetmek ve anlamak olacaktır. Windows telefon uygulamaları oluşturuyorsanız, bunun çoğu tanıdık gelecektir.

  • Windows 8 altında, işletim sistemi bir uygulamanın ömrünü yönetir ve kullanıcı bir uygulamayı sonlandırabilirken, tipik olarak kullanıcı çalışan uygulamaları bilinçli olarak sonlandırmadan yeni uygulamaları açar.

  • Windows 10 için Evrensel Windows Platformu (UWP) bu sorunları gidererek masaüstü kullanıcılarına bazı harika şeyler sunar, böylece birden çok uygulama birden çok pencereli bir deneyimle çalışabilir.

Windows uygulamaları, aşağıda gösterildiği gibi temel düzeyde üç durumda bulunabilir.

  • Running

  • Suspended

  • Terminate

  • Bir kullanıcı herhangi bir uygulamayı başlattığında / etkinleştirdiğinde, running durum.

  • Bir kullanıcı onu kullanmazsa ve artık ön planda değilse uygulamalar askıya alınabilir.

  • Askıya alındı ​​durumundan, uygulamalar sistem kaynaklarını geri almak için o uygulamayı sürdürebilir veya işletim sistemini sonlandırabilir.

İşlem Durumu Geçişi

Çalışan bir uygulamadaki işlem durumu geçişlerini anlamak önemlidir. Kullanıcı uygulamayı ilk kez başlattığında, açılış ekranı gösterilir ve ardından uygulama çalışmaya başlar.

Süreç şu şekilde açıklanabilir -

  • Uygulama askıya alındığında, uygulamanızın askıya alınan olayı işlemesi beş saniye sürer.

  • Uygulama askıya alındığında, kesinlikle hiçbir kod çalışmaz ve hiçbir kaynak tahsis edilmez.

  • Devam ettiğinde, uygulamaya devam ettiği bildirilir. Askıya alınmış bir durumdan geliyorsanız, herhangi bir işlem yapmanıza gerek yoktur.

  • Hafıza baskısı altında uygulamanızın sonlandırılması mümkündür.

  • Bu noktada bilgilendirilmeyeceğinizi ve bu nedenle yaptığınız herhangi bir tasarruf, askıya alınmış başvuru durumuna girdiğinizde yapmanız gerektiğini unutmayın.

Uygulama arasında geçiş yaptığında Running ve Suspended durumları, yangın durdurma ve devam etme olayları.

Bazen verileri kaydetmeniz gerekir. Ardından, aşağıda gösterildiği gibi asenkron yöntemleri çağırmanız gerekir.

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"]; 
}

Aşağıda verilen XAML dosyasında gösterildiği gibi kontrollerin eklendiği bir örneği inceleyelim.

<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>

Aşağıda verilen, Askıya Alma ve Sürdürme olaylarının uygulandığı C # kodudur. Mevcut veriler şurada saklanacaktır:suspend event yerel ayarlarda ve ardından veriler resume event aşağıda gösterildiği gibi yerel ayarlardan.

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); 
         } 
      } 
   } 
}

Yukarıdaki kod derlendiğinde ve çalıştırıldığında, aşağıdaki pencereyi göreceksiniz. Şimdi istediğiniz bilgileri yazın.

Gidelim Lifecycle Etkinlikler açılır menüsü ve seçin suspended. Şimdi başvurunuz askıya alınacak ve istenen bilgiler yerel ayarlarda saklanacaktır. Aşağıda verilen ekran görüntüsüne bakın.

Şimdi, başvurunuzu devam ettirmek istediğinizde seçeneği seçin Resume -den Lifecycle Events Menü.

Artık depolanan bilgilerin yerel ayarlardan alındığını ve uygulamanın askıya alındığı aynı durumda kaldığı yerden devam ettirildiğini göreceksiniz.