การพัฒนา Windows 10 - วงจรชีวิต

ในอดีต Windows มีสภาพแวดล้อมที่ผู้ใช้สามารถเรียกใช้หลายแอปพลิเคชันพร้อมกัน ผู้ใช้สามารถสลับระหว่างแอปพลิเคชันต่างๆได้อย่างง่ายดาย รุ่นนี้ทำงานได้ไม่ดีกับโทรศัพท์หรือแท็บเล็ตที่โดยทั่วไปการใช้งานจะเน้นไปที่แอปพลิเคชันเดียว

หนึ่งในความท้าทายที่สำคัญที่สุดที่โปรแกรมเมอร์แอปพลิเคชัน Windows 8 Store ต้องเผชิญคือการจัดการและทำความเข้าใจวงจรชีวิตของแอปพลิเคชัน หากคุณได้สร้างแอปพลิเคชัน Windows phone สิ่งนี้ส่วนใหญ่จะคุ้นเคย

  • ภายใต้ Windows 8 ระบบปฏิบัติการจะจัดการอายุการใช้งานของแอปพลิเคชันและในขณะที่ผู้ใช้สามารถยุติแอปพลิเคชันได้โดยทั่วไปแล้วผู้ใช้จะเปิดแอปพลิเคชันใหม่โดยไม่ได้ยุติแอปพลิเคชันที่กำลังทำงานอยู่

  • แพลตฟอร์ม Universal Windows (UWP) สำหรับ Windows 10 แก้ไขปัญหาเหล่านี้โดยนำเสนอสิ่งดีๆให้กับผู้ใช้เดสก์ท็อปเพื่อให้แอปพลิเคชันหลายตัวสามารถทำงานได้โดยใช้หน้าต่างหลายหน้าต่าง

แอปพลิเคชัน Windows สามารถมีอยู่ในสามสถานะในระดับพื้นฐานดังที่แสดงด้านล่าง

  • Running

  • Suspended

  • Terminate

  • เมื่อผู้ใช้เปิด / เปิดใช้งานแอปพลิเคชันใด ๆ ผู้ใช้จะเข้าสู่ไฟล์ running สถานะ.

  • สามารถระงับแอปพลิเคชันได้หากผู้ใช้ไม่ได้ใช้งานและไม่ได้อยู่เบื้องหน้าอีกต่อไป

  • จากสถานะถูกระงับแอปพลิเคชันสามารถดำเนินการต่อแอปพลิเคชันนั้นต่อหรือยุติระบบปฏิบัติการเพื่อเรียกคืนทรัพยากรระบบ

การเปลี่ยนสถานะของกระบวนการ

สิ่งสำคัญคือต้องเข้าใจการเปลี่ยนสถานะของกระบวนการในแอปพลิเคชันที่ทำงานอยู่ เมื่อผู้ใช้เปิดแอปพลิเคชันครั้งแรกหน้าจอเริ่มต้นจะแสดงขึ้นจากนั้นแอปพลิเคชันจะเริ่มทำงาน

สามารถอธิบายกระบวนการได้ดังนี้ -

  • เมื่อแอปพลิเคชันถูกระงับแอปของคุณจะมีเวลาห้าวินาทีในการจัดการกับเหตุการณ์ที่ถูกระงับนั้น

  • เมื่อแอปพลิเคชันถูกระงับจะไม่มีการรันโค้ดและไม่มีการจัดสรรทรัพยากรใด ๆ

  • เมื่อดำเนินการต่อแอปจะได้รับแจ้งว่ากลับมาทำงานอีกครั้ง หากคุณมาจากสถานะถูกระงับคุณไม่จำเป็นต้องดำเนินการใด ๆ

  • ภายใต้ความกดดันของหน่วยความจำเป็นไปได้ที่แอปพลิเคชันของคุณจะถูกยกเลิก

  • โปรดจำไว้ว่าคุณจะไม่ได้รับการแจ้งเตือน ณ จุดนั้นดังนั้นการประหยัดใด ๆ ที่คุณทำคุณต้องทำเมื่อคุณเข้าสู่สถานะแอปพลิเคชันที่ถูกระงับ

เมื่อแอปพลิเคชันเปลี่ยนไปมาระหว่าง Running และ Suspended สถานะการระงับอัคคีภัยและการกลับสู่เหตุการณ์ตามลำดับ

บางครั้งคุณต้องบันทึกข้อมูล จากนั้นคุณต้องเรียกใช้วิธีการอะซิงโครนัสดังที่แสดงด้านล่าง

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

ให้เราศึกษาตัวอย่างที่เพิ่มการควบคุมดังที่แสดงในไฟล์ XAML ที่กำหนดด้านล่าง

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

ให้ด้านล่างนี้คือรหัส C # ซึ่งมีการใช้งานเหตุการณ์ระงับและดำเนินการต่อ ข้อมูลปัจจุบันจะถูกเก็บไว้ในไฟล์suspend event ในการตั้งค่าท้องถิ่นจากนั้นข้อมูลจะถูกดึงมาในไฟล์ resume event จากการตั้งค่าท้องถิ่นดังที่แสดงด้านล่าง

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

เมื่อโค้ดด้านบนถูกคอมไพล์และรันคุณจะเห็นหน้าต่างต่อไปนี้ ตอนนี้เขียนข้อมูลที่ต้องการ

ให้เราไปที่ Lifecycle เมนูแบบเลื่อนลงของเหตุการณ์และเลือก suspended. ตอนนี้แอปพลิเคชันของคุณจะถูกระงับและข้อมูลที่ต้องการจะถูกเก็บไว้ในการตั้งค่าในเครื่อง ดูภาพหน้าจอด้านล่าง

ตอนนี้เมื่อคุณต้องการกลับมาใช้งานแอปพลิเคชันของคุณให้เลือกตัวเลือก Resume จาก Lifecycle Events เมนู.

ตอนนี้คุณจะเห็นว่าข้อมูลที่จัดเก็บถูกดึงมาจากการตั้งค่าในเครื่องและแอปพลิเคชันจะกลับมาทำงานต่อในสถานะเดิมที่ถูกระงับ