Xamarin.Android'de Intent Services
Hem başlatılan hem de bağlı hizmetler ana iş parçacığında çalıştırılır, yani performansı sorunsuz tutmak için bir hizmetin işi zaman uyumsuz olarak gerçekleştirmesi gerekir. Bu sorunu gidermenin en basit yollarından biri, yapılacak işin tek bir iş parçacığı tarafından hizmet edilen bir kuyruğa yerleştirildiği çalışan kuyruğu işlemci düzenidir.
IntentService
, bu desenin Service
Android'e özgü bir uygulamasını sağlayan sınıfının bir alt sınıfıdır. Kuyruğa alma işini yönetir, kuyruğa hizmet vermek için bir çalışan iş parçacığı başlatır ve çalışan iş parçacığında çalıştırılacak istekleri kuyruktan çeker. , IntentService
kuyrukta daha fazla iş olmadığında sessizce durur ve çalışan iş parçacığını kaldırır.
Çalışma, bir Intent
oluşturulup yöntemine geçirilerek Intent
StartService
kuyruğa gönderilir.
Çalışırken yöntemi IntentService
durdurmak veya kesmek OnHandleIntent
mümkün değildir. Bu tasarım nedeniyle, bir IntentService
durum bilgisi olmayan tutulmalıdır; uygulamanın geri kalanından gelen etkin bir bağlantıya veya iletişime güvenmemelidir. , IntentService
iş isteklerini durum bilgisi olmayan bir şekilde işlemeye yöneliktir.
Alt sınıflama IntentService
için iki gereksinim vardır:
- Yeni tür (alt sınıflamayla
IntentService
oluşturulur) yalnızca yöntemini geçersiz kılarOnHandleIntent
. - Yeni tür oluşturucu, istekleri işleyecek çalışan iş parçacığını adlandırmak için kullanılan bir dize gerektirir. Bu çalışan iş parçacığının adı öncelikli olarak uygulamada hata ayıklanırken kullanılır.
Aşağıdaki kod, geçersiz kılınan OnHandleIntent
yöntemiyle bir IntentService
uygulamayı gösterir:
[Service]
public class DemoIntentService: IntentService
{
public DemoIntentService () : base("DemoIntentService")
{
}
protected override void OnHandleIntent (Android.Content.Intent intent)
{
Console.WriteLine ("perform some long running work");
...
Console.WriteLine ("work complete");
}
}
Bir örneği oluşturup Intent
ardından bu Intent ile yöntemini parametre olarak çağırarak StartService
öğesine iş gönderilirIntentService
. Intent yönteminde bir parametre OnHandleIntent
olarak hizmete geçirilir. Bu kod parçacığı, bir Amada iş isteği gönderme örneğidir:
// This code might be called from within an Activity, for example in an event
// handler for a button click.
Intent downloadIntent = new Intent(this, typeof(DemoIntentService));
// This is just one example of passing some values to an IntentService via the Intent:
downloadIntent.PutExtra("file_to_download", "http://www.somewhere.com/file/to/download.zip");
StartService(downloadIntent);
IntentService
, bu kod parçacığında gösterildiği gibi Intent içindeki değerleri ayıklayabilir:
protected override void OnHandleIntent (Android.Content.Intent intent)
{
string fileToDownload = intent.GetStringExtra("file_to_download");
Log.Debug("DemoIntentService", $"File to download: {fileToDownload}.");
}