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 .
Topik terkait
- Siklus hidup aplikasi
- Menangani aktivasi aplikasi
- Menangani resume aplikasi
- Panduan UX untuk peluncuran, penangguhan, dan lanjutkan
- Eksekusi yang Diperluas
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk