Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dowiedz się, jak aktywować zadanie w tle z poziomu aplikacji za pomocą ApplicationTrigger.
Przykład tworzenia wyzwalacza aplikacji można znaleźć w tym przykładzie.
W tym temacie założono, że masz zadanie w tle, które chcesz aktywować z aplikacji. Jeśli nie masz jeszcze zadania w tle, w BackgroundActivity.csznajduje się przykładowe zadanie w tle. Możesz też wykonać kroki opisane w Tworzenie i rejestrowanie zadania działającego w tle poza procesem, aby je utworzyć.
Dlaczego warto używać wyzwalacza aplikacji
Użyj ApplicationTrigger, aby uruchomić kod w osobnym procesie od aplikacji pierwszego planu. ApplicationTrigger jest odpowiedni, jeśli aplikacja ma zadania do wykonania w tle, nawet jeśli użytkownik zamknie ją. Jeśli praca w tle powinna zostać zatrzymana po zamknięciu aplikacji lub powinna być powiązana ze stanem procesu pierwszego planu, należy zamiast tego użyć Rozszerzonego Wykonywania.
Tworzenie wyzwalacza aplikacji
Utwórz nową ApplicationTrigger. Można je przechowywać w polu, tak jak w poniższym fragmencie kodu. Jest to dla wygody, dzięki czemu nie musimy tworzyć nowej instancji później, gdy chcemy zasygnalizować wywołanie. Można jednak użyć dowolnego wystąpienia ApplicationTrigger, aby uruchomić wyzwalacz.
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
_AppTrigger = new ApplicationTrigger();
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
Windows::ApplicationModel::Background::ApplicationTrigger _AppTrigger;
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
ApplicationTrigger ^ _AppTrigger = ref new ApplicationTrigger();
(Opcjonalnie) Dodawanie warunku
Możesz utworzyć warunek zadania w tle, aby kontrolować, kiedy zadanie jest uruchamiane. Warunek uniemożliwia uruchomienie zadania w tle do momentu spełnienia warunku. Aby uzyskać więcej informacji, zobacz Ustawianie warunków uruchamiania zadania w tle.
W tym przykładzie warunek jest ustawiony na InternetAvailable tak, aby po wyzwoleniu zadanie było uruchamiane tylko po udostępnieniu dostępu do Internetu. Aby uzyskać listę możliwych warunków, zobacz SystemConditionType.
SystemCondition internetCondition = new SystemCondition(SystemConditionType.InternetAvailable);
Windows::ApplicationModel::Background::SystemCondition internetCondition{
Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };
SystemCondition ^ internetCondition = ref new SystemCondition(SystemConditionType::InternetAvailable)
Aby uzyskać bardziej szczegółowe informacje na temat warunków i typów wyzwalaczy w tle, zobacz Support your app with background tasks (Obsługa aplikacji przy użyciu zadań w tle).
Wywołaj RequestAccessAsync()
Przed zarejestrowaniem zadania ApplicationTrigger w tle, wywołaj RequestAccessAsync, aby określić poziom aktywności w tle, na który zezwala użytkownik, ponieważ użytkownik mógł wyłączyć tę aktywność dla Twojej aplikacji. Zobacz Optymalizowanie działania w tle, aby uzyskać więcej informacji na temat sposobów kontrolowania ustawień działania w tle przez użytkowników.
var requestStatus = await Windows.ApplicationModel.Background.BackgroundExecutionManager.RequestAccessAsync();
if (requestStatus != BackgroundAccessStatus.AlwaysAllowed)
{
// Depending on the value of requestStatus, provide an appropriate response
// such as notifying the user which functionality won't work as expected
}
Zarejestruj zadanie w tle
Zarejestruj zadanie w tle, wywołując funkcję rejestracji zadań w tle. Aby uzyskać więcej informacji na temat rejestrowania zadań w tle i zobacz definicję metody
Jeśli rozważasz użycie wyzwalacza aplikacji w celu wydłużenia okresu istnienia procesu w pierwszym planie, rozważ użycie Rozszerzonego Wykonywania. Wyzwalacz aplikacji jest przeznaczony do tworzenia oddzielnego hostowanego procesu do wykonania pracy. Poniższy fragment kodu rejestruje wyzwalacz w tle poza procesem.
string entryPoint = "Tasks.ExampleBackgroundTaskClass";
string taskName = "Example application trigger";
BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" };
std::wstring taskName{ L"Example application trigger" };
Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass";
String ^ taskName = "Example application trigger";
BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition);
Parametry rejestracji zadań w tle są weryfikowane w momencie rejestracji. Zwracany jest błąd, jeśli którykolwiek z parametrów rejestracji jest nieprawidłowy. Upewnij się, że aplikacja bezpiecznie obsługuje scenariusze, w których rejestracja zadań w tle kończy się niepowodzeniem — jeśli zamiast tego aplikacja zależy od prawidłowego obiektu rejestracji po próbie zarejestrowania zadania, może to spowodować awarię.
Uruchom zadanie w tle
Przed wyzwoleniem zadania w tle użyj BackgroundTaskRegistration, aby sprawdzić, czy zadanie w tle jest zarejestrowane. Dobry czas na sprawdzenie, czy wszystkie zadania w tle są zarejestrowane podczas uruchamiania aplikacji.
Wyzwól zadanie w tle, wywołując metodę ApplicationTrigger.RequestAsync. Dowolne wystąpienie ApplicationTrigger będzie odpowiednie.
Zwróć uwagę, że ApplicationTrigger.RequestAsync nie można wywołać z poziomu samego zadania w tle lub gdy aplikacja jest w stanie działania w tle (zobacz cykl życia aplikacji, aby uzyskać więcej informacji na temat stanów aplikacji). Może on zwrócić DisabledByPolicy, jeśli użytkownik ustawił zasady dotyczące energii lub prywatności, które uniemożliwiają aplikacji wykonywanie działań w tle. Ponadto tylko jeden element AppTrigger może być uruchamiany naraz. Jeśli spróbujesz uruchomić AppTrigger, gdy inny jest już uruchomiony, funkcja zwróci ObecnieUruchomiony.
var result = await _AppTrigger.RequestAsync();
Zarządzaj zasobami dla zadania w tle
Użyj BackgroundExecutionManager.RequestAccessAsync, aby określić, czy użytkownik zdecydował, że działanie aplikacji w tle powinno być ograniczone. Należy pamiętać o użyciu baterii i działać tylko w tle, gdy konieczne jest wykonanie akcji, której chce użytkownik. Zobacz Optymalizowanie działania w tle, aby uzyskać więcej informacji na temat sposobów kontrolowania ustawień działania w tle przez użytkowników.
- Pamięć: Dostrajanie pamięci i zużycia energii aplikacji jest kluczem do zapewnienia, że system operacyjny umożliwi uruchomienie zadania w tle. Użyj interfejsów API zarządzania pamięcią , aby zobaczyć ilość pamięci używanej przez zadanie w tle. Im większa ilość pamięci używanej przez zadanie w tle, tym trudniej jest systemowi operacyjnemu zachować jego działanie, gdy inna aplikacja znajduje się na pierwszym planie. Użytkownik ma ostatecznie kontrolę nad wszystkimi działaniami w tle, które aplikacja może wykonać i ma wgląd w wpływ aplikacji na użycie baterii.
- Czas procesora CPU: zadania w tle są ograniczone przez czas użycia zegara ściany, który uzyskuje się na podstawie typu wyzwalacza. Zadania w tle wyzwalane przez wyzwalacz aplikacji są ograniczone do około 10 minut.
Zobacz Wspieranie aplikacji przy użyciu zadań w tle, aby poznać ograniczenia zasobów stosowane do zadań w tle.
Uwagi
Począwszy od systemu Windows 10, nie jest już konieczne dodanie aplikacji do ekranu blokady w celu korzystania z zadań w tle.
Zadanie w tle będzie uruchamiane tylko przy użyciu ApplicationTrigger, jeśli najpierw wywołasz RequestAccessAsync.
Tematy pokrewne
- Wytyczne dotyczące zadań w tle
- Przykładowy kod dla zadania w tle
- Utwórz i zarejestruj zadanie w tle w ramach procesu.
- Tworzenie i rejestrowanie zadania w tle poza procesem
- Debugowanie zadania w tle
- Deklarowanie zadań w tle w manifeście aplikacji
- Zwolnij pamięć, gdy Twoja aplikacja przechodzi w tło
- Zarządzanie anulowanym zadaniem w tle
- Jak wyzwalać zdarzenia związane z wstrzymywaniem, wznawianiem oraz działaniem w tle w aplikacjach UWP (podczas debugowania)
- Monitorowanie postępu i ukończenia zadania w tle
- Odrocz zawieszenie aplikacji z wydłużonym czasem działania
- Zarejestruj zadanie w tle
- Reagowanie na zdarzenia systemowe za pomocą zadań w tle
- Ustawianie warunków uruchamiania zadania w tle
- Zaktualizuj dynamiczny kafelek za pomocą zadania w tle
- Skorzystaj z wyzwalacza konserwacji