Чтобы исправить вашу проблему с Сервисом, замораживающим ваше приложение при запуске, вы можете сделать несколько разных вещей.
Одна из них - запуск Задачи вместо блокировки основного потока.
Итак, инкапсулируйте свою логику c таким способом, как:
private async Task ReadFavorites(CancellationToken token = default)
{
while(!token.IsCancellationRequested)
{
// your database and notification logic here...
await Task.Delay(18000000, token);
}
}
Затем в OnStartCommand
вы можете запустить его с помощью:
_ = Task.Run(() => ReadFavorites());
Если вы в какой-то момент захотите Чтобы остановить эту службу и отменить задачу, вы можете создать CancellationTokenSource
и передать CancellationToken
из этого в метод:
var cts = new CancellationTokenSource();
var token = cts.Token;
Затем передать этот токен в запущенную задачу:
_ = Task.Run(() => ReadFavorites(token), token);
Таким образом, вы можете позвонить cts.Cancel()
, чтобы отменить любые задачи, которые вы больше не хотите запускать.
Однако, что-то вроде этого, вероятно, было бы лучше сделать с помощью JobScheduler
API в Android, так как вы все равно так долго ждете между проверками. Таким образом, вам не понадобится постоянно работающая служба переднего плана с отображением уведомления.