Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aplikacje klasyczne utworzone za pomocą Zestaw SDK do aplikacji systemu Windows działają w sposób ciągły, nawet gdy użytkownik przełącza się do innej aplikacji. W tym artykule wyjaśniono, jak działa wykonywanie w tle i zaleca najlepsze rozwiązania dotyczące wydajności.
Ważna
Aplikacje klasyczne nie są automatycznie zawieszane ani przerywane przez system w taki sposób, w jaki są aplikacje platformy UWP. Aplikacja będzie kontynuowana do momentu zamknięcia jej przez użytkownika lub zakończenia procesu. Aby działać bez ograniczeń czasowych, nie są wymagane żadne specjalne interfejsy API ani ograniczone uprawnienia. W razie potrzeby użyj powiadomień pamięci systemowej, aby reagować na wykorzystanie zasobów.
Aplikacje komputerowe działają natywnie w tle
W systemie UWP działanie w tle bez ograniczeń czasowych wymagało zastrzeżonego uprawnienia extendedBackgroundTaskTime oraz wdrożenia korporacyjnego. Aplikacje klasyczne nie mają tego ograniczenia. Wątki Twojej aplikacji nadal działają, liczniki czasu nadal działają, a połączenia sieciowe pozostają otwarte niezależnie od tego, czy Twoje okno jest widoczne.
Oznacza to, że można wykonywać następujące czynności:
- Zachowaj trwałe połączenia z serwerami (na przykład aplikacje do czatów, monitorowanie w czasie rzeczywistym).
- Uruchamianie długich obliczeń (na przykład kodowanie wideo, analiza danych).
- Sonduj dostępność aktualizacji zgodnie z harmonogramem.
- Odtwórz kontrolki audio i aktualizuj multimedia.
Najlepsze rozwiązania dotyczące wydajności baterii
Mimo że aplikacje klasyczne mogą działać bez ograniczeń, bycie dobrym obywatelem na urządzeniach zasilanych baterią poprawia środowisko użytkownika. System może oznaczyć Twoją aplikację jako intensywnie korzystającą z zasobów, jeśli w tle nadmiernie obciąża procesor lub korzysta z sieci.
Zmniejsz pracę, gdy okno nie jest widoczne
// m_window is your app's main Window; _updateTimer is a DispatcherTimer field.
Microsoft.UI.Xaml.Window m_window = this;
Microsoft.UI.Xaml.DispatcherTimer _updateTimer = new();
m_window.Activated += (sender, args) =>
{
if (args.WindowActivationState == WindowActivationState.Deactivated)
{
// Window lost focus — slow down background processing
_updateTimer.Interval = TimeSpan.FromSeconds(30);
}
else
{
// Window is active — resume full-speed processing
_updateTimer.Interval = TimeSpan.FromSeconds(1);
}
};
Używaj energooszczędnych wzorców
- Zmniejsz częstotliwość czasomierza — przełącz się z sekundy podrzędnej na interwały wielosekundowe, gdy aplikacja znajduje się w tle.
- Wstrzymaj renderowanie inne niż niezbędne — zatrzymaj animacje, pracę procesora GPU i aktualizacje ekranu.
- Żądania sieciowe wsadowe — połącz wiele żądań w mniej, większe.
- Uwzględniaj tryb oszczędzania baterii — sprawdź PowerManager.BatteryStatus i ogranicz pracę, gdy urządzenie działa na baterii.
using Windows.System.Power;
private bool _enableBackgroundSync = true;
private void CheckPowerState()
{
if (PowerManager.BatteryStatus == BatteryStatus.Discharging &&
PowerManager.RemainingChargePercent < 20)
{
// Reduce background work significantly
_enableBackgroundSync = false;
}
}
Używanie zadań w tle do pracy sterowanej zdarzeniami
Jeśli aplikacja musi reagować na zdarzenia systemowe (takie jak timer, powiadomienie push lub zmiana sieci) bez ciągłego działania, rozważ użycie zadania w tle:
var builder = new BackgroundTaskBuilder
{
Name = "PeriodicSync",
TaskEntryPoint = "MyApp.Background.SyncTask"
};
builder.SetTrigger(new TimeTrigger(15, false));
builder.Register();
Note
Zadania w tle wymagają tożsamości pakietu MSIX na potrzeby rejestracji. Jeśli aplikacja nie jest pakietowana, użyj zamiast tego timerów w procesie lub zaplanowanych zadań.
Wydłużone działanie dla zadań krytycznych
Jeśli masz pracę, która nie powinna zostać przerwana przez zarządzanie energią (na przykład zapisywanie dużego pliku), użyj sesji rozszerzonego wykonywania. Sygnalizuje to systemowi, że praca jest ważna, nawet na urządzeniach zasilanych baterią.
Porównanie z wykonywaniem w tle platformy UWP
| Funkcja | platforma UWP | Pulpit nawigacyjny |
|---|---|---|
| Aplikacja działa w tle | Tylko w przypadku zadań w tle lub ograniczonych możliwości | Zawsze |
| Wymaga deklaracji możliwości | Tak (extendedBackgroundTaskTime) |
No |
| Kończenie działania systemu w celu zapisania zasobów | Yes | No |
| Ograniczanie wydajności w trybie oszczędzania baterii | System wymusza ograniczenia | Aplikacja powinna samodzielnie regulować |
| Zadania w tle dotyczące pracy sterowanej zdarzeniami | Podstawowy mechanizm | Opcjonalne uzupełnienie |