"Bu Hizmetle bir Android Hizmeti başlatırsanız, startService(..)
siz açıkça çağırana kadar çalışır durumda kalır stopService(..)
. Bir hizmetin sistem tarafından çalıştırılmasının iki nedeni vardır. Biri ararsa Context.startService()
, sistem hizmeti alır ( onCreate()
eğer onu oluşturur ve yöntemini çağırırsa) gerekir) ve ardından onStartCommand(Intent, int, int)
istemci tarafından sağlanan bağımsız değişkenlerle yöntemini çağırın . Hizmet bu noktada Context.stopService()
veya çağrılıncaya kadar çalışmaya devam edecektir. İç içe yerleştirilmeyecek stopSelf()
birden çok çağrının Context.startService()
(buna karşılık gelen birden çok çağrı ile sonuçlanmasına rağmen onStartCommand()
) kaç kez başlatılırsa başlatılsın bir hizmet bir kez durdurulur Context.stopService()
veya stopSelf()
çağrılır; ancak hizmetlerstopSelf(int)
hizmetin, başlatılan amaçlar işlenene kadar durdurulmamasını sağlamak için yöntem.
İstemciler ayrıca Context.bindService()
bir hizmetle kalıcı bir bağlantı elde etmek için kullanabilir . Bu, hizmet zaten çalışmıyorsa ( onCreate()
bunu yaparken arama ), ancak arama yapmıyorsa da aynı şekilde hizmeti oluşturur onStartCommand()
. İstemci IBinder
, hizmetin kendi onBind(Intent)
yönteminden döndürdüğü nesneyi alacak ve müşterinin daha sonra hizmete geri arama yapmasına izin verecektir . Hizmet, bağlantı kurulduğu sürece çalışmaya devam edecektir (istemcinin Hizmetlere ilişkin bir referansı olsa da olmasa da IBinder
). Genellikle IBinder
döndürülen, AIDL'de yazılmış karmaşık bir arabirim içindir.
Bir hizmet hem başlatılabilir hem de ona bağlı bağlantılar olabilir. Böyle bir durumda, sistem, hizmet başlatıldığı veya kendisine Context.BIND_AUTO_CREATE
bayrakla bir veya daha fazla bağlantı olduğu sürece hizmetin çalışmaya devam etmesini sağlayacaktır . Bu durumların hiçbiri geçerli olmadığında, Hizmetin onDestroy()
yöntemi çağrılır ve hizmet etkin bir şekilde sonlandırılır. Tüm temizleme (iş parçacığı durdurma, alıcıların kaydını silme) geri döndükten sonra tamamlanmalıdır onDestroy()
. "