Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk egy Windows App SDK asztali alkalmazás életciklusát ismerteti az indítástól a leállításig. Az életciklus megértése segít az állapot kezelésében, az erőforrások megőrzésében és a zökkenőmentes felhasználói élmény biztosításában.
Important
Az UWP-alkalmazásokkal ellentétben az asztali alkalmazásokra (beleértve a WinUI 3-at is) nem vonatkozik a háttérbe kerüléskor történő automatikus felfüggesztés és leállítás UWP folyamat-életcikluskezelési (PLM) modellje. Addig futnak, amíg a felhasználó be nem zárja őket, vagy a folyamat kilép. A csomagolt asztali alkalmazásokra azonban továbbra is rendszerszintű energia- és erőforrás-szabályzatok vonatkoznak – a Modern Készenléti funkció például felfüggesztheti az összes felhasználói módú folyamatot (beleértve az alkalmazást is), amikor az eszköz alvó állapotban van, Windows pedig hatékonysági módot (EcoQoS) alkalmazhat a cpu-prioritás és a szolgáltatásminőség szabályozására a háttér- vagy kis méretű alkalmazások esetében. Az alkalmazásnak továbbra is elegánsan kell kezelnie a váratlan leállításokat (például áramkimaradást, operációsrendszer-frissítéseket vagy a folyamatot a Feladatkezelőn keresztül befejező felhasználót), és nem feltételezheti, hogy mindig teljes sebességű CPU-hozzáféréssel rendelkezik, miközben háttérrel rendelkezik.
Életciklus áttekintése
Az asztali Windows App SDK-alkalmazások életciklusa egyszerűbb, mint az UWP:
| State | Description |
|---|---|
| Nem fut | Az alkalmazásfolyamat nem indult el. |
| Fut | Az alkalmazás aktív. Lehet, hogy nincs látható ablaka. |
| Zárt | A felhasználó (vagy a rendszer) befejezte a folyamatot. |
Mivel nincs felfüggesztési állapot, nem kell úgy kezelnie a Suspending vagy Resuming eseményeket, mint az UWP-alkalmazások esetében. Ehelyett a következőkre összpontosítson:
- A felhasználói állapot mentése az ablak bezárásakor vagy az alkalmazás leállásakor.
- Aktiválás kezelése (indítás, fájl, protokoll vagy más aktiválási típus).
- A háttérben futó feladatok hatékony kezelése a hordozható eszközök akkumulátorának kímélése érdekében.
Alkalmazás indítása
Amikor egy felhasználó elindítja az alkalmazást, a Microsoft. UI. Az Xaml.Application.OnLaunched metódus fut. Ezzel inicializálhatja a főablakot, és navigálhat az első oldalra.
public partial class App : Microsoft.UI.Xaml.Application
{
private Microsoft.UI.Xaml.Window? m_window;
protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
m_window = new MainWindow();
m_window.Activate();
}
}
// MainWindow is the window class generated by the WinUI 3 project
// template (MainWindow.xaml / MainWindow.xaml.cs).
public partial class MainWindow : Microsoft.UI.Xaml.Window
{
}
Note
Windows App SDK asztali alkalmazások nem kapnak PreviousExecutionState értéket a rendszertől. Ha összeomlás vagy váratlan leállás után vissza kell állítania az állapotot, implementálja saját állapotmegőrzési mechanizmusát (például mentse az állapotot egy helyi fájlba egy időzítőn, vagy amikor a fontos műveletek befejeződnek).
Alkalmazásaktiválás
A Windows App SDK átfogó aktiválási támogatást biztosít a Microsoft.Windows.AppLifecycle névtéren keresztül. Az alkalmazás a következővel aktiválható:
- Alapértelmezett indítás – A felhasználó kiválasztja az alkalmazás ikonját.
- Fájlaktiválás – A felhasználó megnyitja az alkalmazáshoz társított fájltípust.
- Protokollaktiválás – A rendszer meghívja az alkalmazáshoz regisztrált URI-sémát.
- Indítási aktiválás – Az alkalmazás regisztrál, hogy a felhasználói bejelentkezéskor induljon el.
- Egyéb — Felugró értesítés, megosztási célpont és további aktiválási típusok.
Az aktiválás típusának meghatározásához használja az AppInstance.GetActivatedEventArgs parancsot :
using Microsoft.Windows.AppLifecycle;
var activatedArgs = AppInstance.GetCurrent().GetActivatedEventArgs();
switch (activatedArgs.Kind)
{
case ExtendedActivationKind.File:
var fileArgs = activatedArgs.Data as
Windows.ApplicationModel.Activation.IFileActivatedEventArgs;
// Handle the file
break;
case ExtendedActivationKind.Protocol:
var protocolArgs = activatedArgs.Data as
Windows.ApplicationModel.Activation.IProtocolActivatedEventArgs;
// Handle the URI
break;
case ExtendedActivationKind.Launch:
default:
// Standard launch
break;
}
A csomagolt alkalmazások a(z) Package.appxmanifest használatával regisztrálnak a fájl- és protokollaktiváláshoz. A csomagolatlan alkalmazások nem rendelkeznek jegyzékfájllal Microsoft.Windows.AppLifecycle.ActivationRegistrationManager, ezért ugyanazokat az aktiválási típusokat regisztrálják a kódban. Mindkét megközelítés részletes útmutatóját az alkalmazás aktiválása Windows App SDK című témakörben találja.
Futás a háttérben és az előtérben
Az asztali alkalmazások továbbra is futnak, függetlenül attól, hogy az előtérben vannak-e. A rendszer nem állítja le a szálakat, és nem vonja vissza a memóriát, amikor a felhasználó másik alkalmazásra vált. Az erőforrás-használat optimalizálása érdekében azonban továbbra is reagálhat a láthatósági változásokra:
- Szabadítsa fel a GPU- vagy renderelési erőforrásokat, amikor az ablak minimalizált állapotban van.
- Szüneteltetheti az animációkat vagy a média előnézetét, ha az ablak elveszíti a fókuszt.
- Csökkentse az időzítő gyakoriságát a háttérbeli lekérdezések esetében.
Microsoft.UI.Xaml.Window nem tesz közzé eseményt VisibilityChanged . Ehelyett használja az Window.Activated eseményt annak észlelésére, hogy az ablak mikor kap vagy veszít fókuszt, vagy hogy AppWindow.Changed észlelje az előadói állapot változásait (például minimalizálva vagy visszaállítva):
// m_window is the field declared on your App type (see "App launch" above).
Microsoft.UI.Xaml.Window m_window = this;
m_window.Activated += (sender, args) =>
{
if (args.WindowActivationState == WindowActivationState.Deactivated)
{
// Window lost focus — consider reducing work,
// for example pausing animations or media preview
}
else
{
// Window is active — resume normal work
}
};
// To specifically detect minimize/restore, use AppWindow.Changed
var appWindow = m_window.AppWindow;
appWindow.Changed += (sender, args) =>
{
if (args.DidPresenterChange)
{
if (sender.Presenter is OverlappedPresenter presenter &&
presenter.State == OverlappedPresenterState.Minimized)
{
// Window is minimized — pause expensive rendering
}
else
{
// Window is restored — resume rendering
}
}
};
Tip
Akkumulátoros eszközökön a háttérmunka csökkentése, ha az alkalmazás nem látható, javítja az akkumulátor élettartamát és a rendszer válaszkészségét, még akkor is, ha a rendszer nem kényszeríti a felfüggesztést.
Állapot mentése
Mivel az asztali alkalmazások nincsenek felfüggesztve, ön szabályozhatja, hogy mikor mentse az állapotot. Ajánlott megközelítések:
-
Ablak bezárásakor – Az esemény kezelése az
Window.Closedadatok megőrzéséhez. - Rendszeres mentés – Időmérővel időnként (például 60 másodpercenként) mentheti az állapotot.
- Fontos műveletek esetén – Mentés, miután a felhasználó végrehajtott egy jelentős műveletet (például szerkesztés befejezése).
// m_window is the field declared on your App type (see "App launch" above).
Microsoft.UI.Xaml.Window m_window = this;
m_window.Closed += (sender, args) =>
{
SaveApplicationState();
};
// Replace with your own logic to persist app state.
void SaveApplicationState() { }
Alkalmazás bezárása és leállítása
Az asztali alkalmazások leállnak, ha:
- A felhasználó bezárja az utolsó ablakot.
- A kód meghívja a(z)
Application.Current.Exit()elemet. - A folyamat külsőleg véget ér (Feladatkezelő, rendszerleállítás).
Nincs az UWP-ből ismert, „a rendszer az erőforrások felszabadítása érdekében megszünteti” állapot. Az alkalmazás addig fut, amíg explicit módon nem lép ki.
Note
Ha az alkalmazás összeomlik, az teljesen újraindul. Rendszeres állapot-mentés implementálása az adatvesztés minimalizálása érdekében.
Különbségek az UWP-alkalmazások életciklusától
| Magatartás | UWP | Windows App SDK (asztali gépekhez) |
|---|---|---|
| Automatikus felfüggesztés (PLM) | Igen – néhány másodperc után a háttérben | Nem – de az egész eszköz továbbra is be tud lépni a Modern Készenléti üzemmódba |
| A rendszer leállítása a memória felszabadítására | Igen – a felfüggesztett alkalmazások leállhatnak | No |
Suspending
/
Resuming Események |
Igen | Nem alkalmazható |
| Előzetes telepítés | Igen (bejelentkezés) | No |
| Háttérállapot kikényszerítve | Igen | Nem – de a hatékonysági mód (EcoQoS) szabályozhatja a háttérbeli alkalmazásokat |
| Állapot visszaállítása a megszűnés után | Jó UX-hez szükséges | Nem kötelező – saját megvalósítás |
Kapcsolódó tartalom
Windows developer