2016-04-21 68 views
0

兩種方案與應用程序生命週期會發生什麼:當設備關閉

  1. 用戶將設備關閉,而應用程序正在運行。

  2. 設備自行關閉,因爲電池電量不足,而應用程序正在運行。

生命週期會發生什麼?如果我理解正確,當用戶關閉應用程序時,應用程序被暫停並終止。在兩種情況下會發生什麼?

我還沒有能夠調試它,因爲應用程序連接到調試器時沒有掛起。

回答

0

當應用程序運行時關閉設備時,它會終止。

您可以使用Visual Studio調試應用程序的掛起狀態,按F5進入正常調試模式。然後使用頂部工具欄中的Lifecycle Events來調試暫停的恢復事件。更多的是,這裏https://msdn.microsoft.com/en-us/library/hh974425.aspx

+0

我知道怎麼樣在VS中使用生命週期事件。我不能用它來模擬設備關機。當設備關閉時,在應用程序終止之前無法做任何事情? – Nfear

+0

設備關閉/終止進程時,如果終止應用程序,則無法執行任何操作。 – thang2410199

1

測試它在我的電腦窗戶手機上。根據我的測試結果,應用程序的行爲不同根據不同設備當設備關閉。以下是我的測試結果:
對於方案1:用戶在應用程序運行時關閉設備。
在計算機上(版本:Windows 10 Enterprise,版本:1511,操作系統版本:10586.218):應用程序終止而不會暫停
在Windows Phone上(Lumia 929和Lumia 950,版本:1511,操作系統版本:10586.218):應用程序暫停,然後終止
對於方案2:設備自行關閉,因爲應用程序運行時電池電量不足。
在Windows Phone(Lumia 929,版本:1511,操作系統版本:10586.218)上:應用程序暫停,然後終止
沒有測試了所有設備,因此您可以根據您的要求在自己的設備使用下面的測試解決方案,測試。
我的測試解決方案:

  1. 商店現在時刻本地設置當應用程序是 懸浮。
  2. 在應用程序運行時(方案1)關閉設備,或者等待 設備自動關閉,因爲應用程序運行時電池電量不足 (方案2)。
  3. 打開設備,再次運行應用程序,並從 本地設置中加載數據以找出上次掛起的時間。如果最後一次 暫停時間是設備關閉的時間,那麼 應用程序會首先暫停,然後終止。否則應用程序只需 終止而不會暫停。

我的測試代碼:
App.xaml.cs

private void OnSuspending(object sender, SuspendingEventArgs e) 
{ 
    var deferral = e.SuspendingOperation.GetDeferral(); 
    //TODO: Save application state and stop any background activity 
    MainPage.SaveData(); 
    deferral.Complete(); 
} 

MainPage.xaml.cs中

public sealed partial class MainPage : Page 
{ 
    public MainPage() 
    { 
     this.InitializeComponent(); 
    } 

    public static void SaveData() 
    { 
     ApplicationData.Current.LocalSettings.Values["txt"] = DateTime.Now.ToString(); 
    } 

    private void btnShowText_Click(object sender, RoutedEventArgs e) 
    { 
     object settingVal = null; 
     if (ApplicationData.Current.LocalSettings.Values.TryGetValue("txt", out settingVal)) 
     { 
      txtToSave.Text = settingVal.ToString(); 
     } 
    } 
} 

MainPage.xaml中

<StackPanel> 
    <Button Name="btnShowText" 
      Width="250" 
      Margin="10" 
      Background="Gray" 
      Click="btnShowText_Click"> 
     Get the last suspended time 
    </Button> 
    <TextBox Name="txtToSave" 
      Width="200" 
      Margin="10" 
      HorizontalAlignment="Left" 
      Header="Last suspended time:" 
      IsReadOnly="True" 
      TextWrapping="Wrap" /> 
</StackPanel>