IntentService
sınıfı, tek bir arka plan iş parçacığı üzerinde işlem çalıştırmak için basit bir yapı sağlar. Böylece kullanıcı arayüzünüzün yanıt verme hızını etkilemeden uzun süreli işlemleri gerçekleştirebilir. Ayrıca IntentService
, kullanıcı arayüzünün yaşam döngüsü olaylarının çoğundan etkilenmediği için AsyncTask
uygulamasını kapatacak durumlarda çalışmaya devam eder.
IntentService
için birkaç sınırlama uygulanır:
-
Doğrudan kullanıcı arayüzünüzle etkileşimde bulunamaz. Bunun sonuçlarını kullanıcı arayüzüne yerleştirmek için bir
Activity
öğesine göndermeniz gerekir. -
İş istekleri sırayla çalışır.
IntentService
üzerinde bir işlem çalışıyorsa ve bu işleme başka bir istek gönderirseniz istek, ilk işlem tamamlanana kadar bekler. -
IntentService
üzerinde çalışan bir işlem kesintiye uğratılamaz.
Bununla birlikte, çoğu durumda basit arka plan işlemlerini gerçekleştirmek için IntentService
tercih edilir.
Bu kılavuzda, aşağıdakilerin nasıl yapılacağı gösterilmektedir:
- Kendi
IntentService
alt sınıfınızı oluşturun. - Gerekli geri çağırma yöntemini (
onHandleIntent()
) oluşturun. - Manifest dosyanızda
IntentService
öğesini tanımlayın.
Gelen intent'leri yönetin
Uygulamanız için bir IntentService
bileşeni oluşturmak üzere IntentService
öğesini genişleten bir sınıf tanımlayın ve bu sınıf içinde onHandleIntent()
öğesini geçersiz kılan bir yöntem tanımlayın. Örneğin:
Kotlin
class RSSPullService : IntentService(RSSPullService::class.simpleName) override fun onHandleIntent(workIntent: Intent) { // Gets data from the incoming Intent val dataString = workIntent.dataString ... // Do work here, based on the contents of dataString ... } }
Java
public class RSSPullService extends IntentService { @Override protected void onHandleIntent(Intent workIntent) { // Gets data from the incoming Intent String dataString = workIntent.getDataString(); ... // Do work here, based on the contents of dataString ... } }
onStartCommand()
gibi normal bir Service
bileşeninin diğer geri çağırmalarının IntentService
tarafından otomatik olarak çağrıldığına dikkat edin. IntentService
içinde bu geri çağırmaları geçersiz kılmaktan kaçınmalısınız.
IntentService
oluşturma hakkında daha fazla bilgi edinmek için IntentService sınıfını genişletme bölümüne bakın.
Manifest'te intent hizmetini tanımlayın
IntentService
için uygulama manifestinizde de bir giriş olması gerekir.
Bu girişi,
<application>
öğesinin alt öğesi olan bir <service>
öğesi olarak sağlayın:
<application android:icon="@drawable/icon" android:label="@string/app_name"> ... <!-- Because android:exported is set to "false", the service is only available to this app. --> <service android:name=".RSSPullService" android:exported="false"/> ... </application>
android:name
özelliği, IntentService
sınıf adını belirtir.
<service>
öğesinin amaç filtresi içermediğine dikkat edin. Hizmete iş istekleri gönderen Activity
, açık bir Intent
kullanır. Bu nedenle filtreye gerek yoktur. Bu da yalnızca aynı uygulamadaki bileşenlerin veya aynı kullanıcı kimliğine sahip diğer uygulamaların hizmete erişebileceği anlamına da gelir.
Artık temel IntentService
sınıfına sahip olduğunuza göre Intent
nesneleriyle bu sınıfa iş istekleri gönderebilirsiniz. Bu nesneleri oluşturma ve IntentService
cihazınıza gönderme prosedürü Arka plan hizmetine iş istekleri gönderme bölümünde açıklanmıştır.