Middle
Android'de servislerin yaşam döngüsü nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Hizmetin bir kullanıcı arayüzü yoktur ve arka planda çalışır. Yaşam döngüsü üç ana yöntemle yönetilir:
onCreate(): Hizmet ilk oluşturulduğunda çağrılır. Burada başlatma yapılır.onStartCommand()/ bağlanma sırasında çağrılan yöntem (örneğin,onBind()):onStartCommand()startService()ile hizmet başlatıldığında çağrılır. Sistem, hizmetin öldürülmesi durumunda nasıl yeniden başlatılacağını belirten bir bayrak döndürür.onBind()isebindService()ile hizmete bağlanan bir istemci bağlandığında çağrılır.onDestroy(): Hizmet yok edildiğinde çağrılır. Burada tüm kaynaklar serbest bırakılır.
İki tür hizmet vardır ve bunlar yaşam döngüsünü etkiler:
- Başlatılan Hizmet (Started Service):
startService()ile başlatılır. AçıkçastopSelf()veyastopService()ile durdurulana kadar çalışır. Sistem,onStartCommand()uygun bayrağı döndürdüyse, yok edilmeden sonra yeniden başlatmaya çalışır. - Bağlı Hizmet (Bound Service):
bindService()ile başlatılır. En az bir aktif istemci bağlı olduğu sürece var olur. Tüm istemciler bağlantıyı keserse, hizmet yok edilir.onBind()birIBinderuygulaması döndürür ve bu, hizmetle etkileşim için kullanılır.
Yaşam döngüsü diyagramı:
Start Service --+--> onStartCommand() --+--> Çalışıyor
| |
Bind Service ---+--> onBind() -----------+--> Bağlı
|
onCreate() -----+
|
+--> onRebind()
|
onDestroy() <---+-------------------------+---- Bağlantı Kesildi <--- unbindService()
|
+---- Durduruldu <--- stopSelf() / stopService()
Anahtar noktalar:
onCreate()sadece bir kez çağrılır.onStartCommand()tekrar tekrar çağrılabilir, eğerstartService()tekrar çağrılırsa.- Hizmet, varsayılan olarak ana iş parçacığında çalışır. Uzun süren işlemler ayrı bir iş parçacığında veya
IntentServicekullanılarak yapılmalıdır. - Bağlı hizmetlerin yaşam döngüsü daha karmaşıktır ve istemcilerin durumuna bağlıdır.
Örnek onStartCommand():
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Bir işlem yap
// Örneğin, arka planda bir işi başlat
// Sistem, hizmet yok edildiğinde nasıl davranacağını belirten bayrağı döndürür
return START_STICKY; // Hizmet, öldürülürse yeniden başlatılır
}
Örnek onBind():
private final IBinder binder = new LocalBinder();
public class LocalBinder extends Binder {
MyService getService() {
// Hizmet örneğini istemcilere döndürür
return MyService.this;
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return binder;
}
@Override
public boolean onUnbind(Intent intent) {
// Tüm istemciler bağlantıyı kestiğinde çağrılır
return super.onUnbind(intent);
}