Я пишу приложение для Android с Xamarin.Это приложение выполняет некоторые длительные задачи, показывает уведомления для пользователя и должно делать это в фоновом режиме.Как я знаю, я должен использовать Сервис для этой цели.Я создал свой сервис, вот его код:
public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
{
base.OnStartCommand(intent, flags, startId);
var thread = new Thread(new Runnable(() =>
{
for (int i = 0; i < 10_000; i++)
{
ShowNotification("channel", "Search", $"second: {i}, threadId: {id} startId: {startId}");
Thread.Sleep(1000);
}
StopSelf(startId);
}));
thread.Start();
return StartCommandResult.StartSticky;
}
И код метода ShowNotification
:
protected void ShowNotification(string channel, string title, string message)
{
Intent resultIntent = new Intent(this, GetType());
resultIntent.AddFlags(ActivityFlags.NewTask);
var resultPendingIntent = PendingIntent.GetActivity(this, 0, resultIntent, PendingIntentFlags.UpdateCurrent);
var mBuilder = new NotificationCompat.Builder(this);
mBuilder.SetSmallIcon(Resource.Mipmap.ic_launcher)
.SetContentTitle(title)
.SetContentText(message)
.SetAutoCancel(false)
.SetContentIntent(resultPendingIntent);
if (!(GetSystemService(NotificationService) is NotificationManager mNotificationManager))
return;
if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
{
var importance = NotificationImportance.High;
var notificationChannel = new NotificationChannel(channel, channel, importance);
notificationChannel.EnableLights(true);
notificationChannel.LightColor = Color.Red;
notificationChannel.EnableVibration(true);
notificationChannel.SetVibrationPattern(new long[] { 100, 200, 300, 400, 500, 400, 300, 200, 400 });
mBuilder.SetChannelId(channel);
mNotificationManager.CreateNotificationChannel(notificationChannel);
}
mNotificationManager.Notify(0, mBuilder.Build());
}
Этот код работает, но через 2-5 минут сервис останавливается и новыйуведомления не отображаются.Можно ли запретить остановку моего сервиса (или перезапустить его после остановки)?Я слышал, что должен вернуть флаг START_STICKY из метода OnStartCommand, и я им пользуюсь.Но это не работает, и операционная система все равно останавливает мой сервис.Как я могу решить эту проблему?