Service vs IntentService: Android'de Arka Plan Görevleri Nasıl Seçilir?
Android'de arka plan işleri yaparken Service ve IntentService arasında kalmak yaygın bir sorun. İkisi de UI thread'i bloke etmeden uzun süreli görevleri gerçekleştirse de, çalışma mantıkları tamamen farklı.
Service ana thread üzerinde çalışır. Ağır işlem yaparsanız uygulama donacak. Ama daha esnek: müzik çalma, konum takibi gibi sürekli görevler için idealdir. Siz manuel olarak thread yönetirsiniz.
IntentService ise her intent için otomatik olarak arka plan thread'i açar, işi bitirince kendini kapatır. Tek seferlik, sıralı görevler (dosya indirme, veri senkronizasyon) için mükemmel. Daha basit, daha güvenli.
Android 5.0 sonrası IntentService kullanımı azaldı; JobScheduler ve WorkManager daha tercih ediliyor. Ama hala geçerli ve anlaşılması önemli.
Hadi pratik görelim. İlk olarak basit bir Service örneği:
1public class MyService extends Service {3public int onStartCommand(Intent intent, int flags, int startId) {4new Thread(() -> {5// Arka plan işi6Log.d("MyService", "Uzun işlem başladı");7try {8Thread.sleep(5000);9} catch (InterruptedException e) {10e.printStackTrace();11}12Log.d("MyService", "İşlem bitti");13stopSelf(); // Servisi kapat14}).start();15return START_STICKY;16}1719public IBinder onBind(Intent intent) {20return null;21}22}AndroidManifest.xml'e ekleyin:
1<service android:name=".MyService" />Etkinlikten çağırın:
1startService(new Intent(this, MyService.class));Şimdi IntentService örneği:
1public class MyIntentService extends IntentService {2public MyIntentService() {3super("MyIntentService");4}57protected void onHandleIntent(Intent intent) {8// Otomatik olarak arka plan thread'inde çalışır9Log.d("MyIntentService", "İşlem başladı");10try {11Thread.sleep(5000);12} catch (InterruptedException e) {13e.printStackTrace();14}15Log.d("MyIntentService", "İşlem bitti - service otomatik kapanıyor");16}17}Manifest'e ekleyin ve başlatın (Service'le aynı):
1startService(new Intent(this, MyIntentService.class));Beklenen çıktı: Her iki durumda da loglar 5 saniye arayla görünür; UI donmaz.
Pratik kural: Tek seferlik, sıralı görevler IntentService. Sürekli, karmaşık kontrol Service. Yeni projeler için WorkManager tercih et. IntentService'te thread yönetimi sizin için otomatik; Service'te manuel thread açmalısınız, bu da hata yapma riskini artırır.
0 yorum