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 eksklusif dan handel file 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. Saat aplikasi dilanjutkan, aplikasi harus memperoleh kembali sumber daya eksklusif dan handel filenya.
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 mana aplikasi ditinggalkan, sehingga tampaknya pengguna seolah-olah telah berjalan di latar belakang.
Sistem mencoba 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 eksklusif dan menangani file 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 Anda 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 Menangguhkan, gunakan ExtendedExecutionSession
Catatan
Untuk meningkatkan respons 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 5 detik yang setara untuk prioritas normal pada Windows atau antara 1 dan 10 detik di 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. Hal 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 sedang ditampilkan, lalu klik ikon Tangguhkan .
Topik terkait
- Siklus hidup aplikasi
- Menangani aktivasi aplikasi
- Menangani resume aplikasi
- Panduan UX untuk peluncuran, penangguhan, dan resume
- Eksekusi yang Diperluas