Menangani penangguhan aplikasi

API penting

Pelajari cara menyimpan data aplikasi penting saat sistem menangguhkan aplikasi Anda. Contoh mendaftarkan penanganan aktivitas untuk peristiwa Penangguhan dan menyimpan string ke file.

Mendaftarkan penanganan aktivitas yang ditangguhkan

Daftar untuk menangani peristiwa Penangguhan , yang menunjukkan bahwa aplikasi Anda harus menyimpan data aplikasinya sebelum sistem menangguhkannya.

using System;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.UI.Xaml;

partial class MainPage
{
   public MainPage()
   {
      InitializeComponent();
      Application.Current.Suspending += new SuspendingEventHandler(App_Suspending);
   }
}
Public NotInheritable Class MainPage

   Public Sub New()
      InitializeComponent()
      AddHandler Application.Current.Suspending, AddressOf App_Suspending
   End Sub
   
End Class
MainPage::MainPage()
{
    InitializeComponent();
    Windows::UI::Xaml::Application::Current().Suspending({ this, &MainPage::App_Suspending });
}
using namespace Windows::ApplicationModel;
using namespace Windows::ApplicationModel::Activation;
using namespace Windows::Foundation;
using namespace Windows::UI::Xaml;
using namespace AppName;

MainPage::MainPage()
{
   InitializeComponent();
   Application::Current->Suspending +=
       ref new SuspendingEventHandler(this, &MainPage::App_Suspending);
}

Simpan data aplikasi sebelum penangguhan

Saat aplikasi Anda menangani peristiwa Penangguhan , aplikasi memiliki kesempatan untuk menyimpan data aplikasi pentingnya dalam fungsi handler. Aplikasi harus menggunakan API penyimpanan LocalSettings untuk menyimpan data aplikasi sederhana secara sinkron.

partial class MainPage
{
    async void App_Suspending(
        Object sender,
        Windows.ApplicationModel.SuspendingEventArgs e)
    {
        // TODO: This is the time to save app data in case the process is terminated.
    }
}
Public NonInheritable Class MainPage

    Private Sub App_Suspending(
        sender As Object,
        e As Windows.ApplicationModel.SuspendingEventArgs) Handles OnSuspendEvent.Suspending

        ' TODO: This is the time to save app data in case the process is terminated.
    End Sub

End Class
void MainPage::App_Suspending(
    Windows::Foundation::IInspectable const& /* sender */,
    Windows::ApplicationModel::SuspendingEventArgs const& /* e */)
{
    // TODO: This is the time to save app data in case the process is terminated.
}
void MainPage::App_Suspending(Object^ sender, SuspendingEventArgs^ e)
{
    // TODO: This is the time to save app data in case the process is terminated.
}

Rilis sumber daya

Anda harus merilis sumber daya dan handel file eksklusif sehingga aplikasi lain dapat mengaksesnya saat aplikasi Anda ditangguhkan. Contoh sumber daya eksklusif termasuk kamera, perangkat I/O, perangkat eksternal, dan sumber daya jaringan. Merilis sumber daya dan handel file eksklusif secara eksplisit membantu memastikan bahwa aplikasi lain dapat mengaksesnya saat aplikasi Anda ditangguhkan. Ketika aplikasi dilanjutkan, aplikasi harus memperoleh kembali sumber daya dan handel file eksklusifnya.

Keterangan

Sistem menangguhkan aplikasi Anda setiap kali pengguna beralih ke aplikasi lain atau ke layar desktop atau Mulai. Sistem melanjutkan aplikasi Anda setiap kali pengguna beralih kembali ke aplikasi tersebut. Saat sistem melanjutkan aplikasi Anda, konten variabel dan struktur data Anda sama seperti sebelum sistem menangguhkan aplikasi. Sistem memulihkan aplikasi persis di tempat yang ditinggalkannya, sehingga tampaknya pengguna seolah-olah telah berjalan di latar belakang.

Sistem mencoba untuk menyimpan aplikasi Anda dan datanya dalam memori saat ditangguhkan. Namun, jika sistem tidak memiliki sumber daya untuk menyimpan aplikasi Anda dalam memori, sistem akan menghentikan aplikasi Anda. Ketika pengguna beralih kembali ke aplikasi yang ditangguhkan yang telah dihentikan, sistem mengirim peristiwa Diaktifkan dan harus memulihkan data aplikasinya dalam metode OnLaunched-nya .

Sistem tidak memberi tahu aplikasi saat dihentikan, sehingga aplikasi Anda harus menyimpan data aplikasinya dan merilis sumber daya dan handel file eksklusif saat ditangguhkan, dan memulihkannya saat aplikasi diaktifkan setelah penghentian.

Jika Anda melakukan panggilan asinkron dalam handler Anda, kontrol akan segera kembali dari panggilan asinkron tersebut. Itu berarti bahwa eksekusi kemudian dapat kembali dari penanganan aktivitas dan aplikasi Anda akan pindah ke status berikutnya meskipun panggilan asinkron belum selesai. Gunakan metode GetDeferral pada objek EnteredBackgroundEventArgs yang diteruskan ke penanganan aktivitas Anda untuk menunda penangguhan hingga setelah Anda memanggil metode Lengkap pada objek Windows.Foundation.Deferral yang dikembalikan.

Penangguhan tidak meningkatkan jumlah waktu yang Anda miliki untuk menjalankan kode sebelum aplikasi dihentikan. Ini hanya menunda penghentian sampai metode Lengkap penundaan dipanggil, atau tenggat waktu berlalu-mana yang lebih dulu. Untuk memperpanjang waktu dalam status Penangguhan, gunakan ExtendedExecutionSession

Catatan

Untuk meningkatkan responsivitas sistem di Windows 8.1, aplikasi diberi akses prioritas rendah ke sumber daya setelah ditangguhkan. Untuk mendukung prioritas baru ini, batas waktu operasi yang ditangguhkan diperpanjang sehingga aplikasi memiliki batas waktu yang setara dengan batas waktu 5 detik untuk prioritas normal pada Windows atau antara 1 dan 10 detik pada Windows Phone. Anda tidak dapat memperpanjang atau mengubah jendela batas waktu ini.

Catatan tentang penelusuran kesalahan menggunakan Visual Studio: Visual Studio mencegah Windows menangguhkan aplikasi yang dilampirkan ke debugger. Ini untuk memungkinkan pengguna melihat UI debug Visual Studio saat aplikasi sedang berjalan. Saat menelusuri kesalahan aplikasi, Anda dapat mengirimkannya acara penangguhan menggunakan Visual Studio. Pastikan toolbar Lokasi Debug ditampilkan, lalu klik ikon Tangguhkan .