У меня есть приложение Xamarin для Android. Мне нужно запустить долгосрочную задачу в этом приложении. Как я знаю, я должен использовать класс Service
для него. Я создал такой класс:
[Service]
public class BackgroundService : IntentService
{
Handler mHandler;
public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
{
mHandler = new Handler();
SomeTask();
return 0;
}
private void SomeTask()
{
// Thread.CurrentThread.ManagedThreadId here is 1
Thread.Sleep(5000);
for (int i = 1; i <= 10; i++)
{
mHandler.Post(new Runnable(() =>
{
Toast.MakeText(this, $"Current thread ID in service: {Thread.CurrentThread.ManagedThreadId}", ToastLength.Short).Show();
}));
}
StopSelf();
}
protected override void OnHandleIntent(Intent intent)
{
}
}
А как я использую сервис в действии:
// And here Thread.CurrentThread.ManagedThreadId is 1
var serviceToStart = new Intent(this, typeof(BackgroundService));
StartService(serviceToStart);
Я ожидал, что эта служба запускается в другом фоновом потоке, но Thread.CurrentThread.ManagedThreadId
по активности точно такой же, как Thread.CurrentThread.ManagedThreadId
в методе SomeTask
класса BackgroundService. Более того, когда SomeTask
работает, мое приложение не отвечает. Очевидно, это означает, что сервис не работает в фоновом потоке.
Как сделать так, чтобы служба работала в фоновом потоке / процессе?