2012-09-06 6 views
15

Android uygulamam için bir hizmet yazıyorum ve bağlama mekanizmasının nasıl çalıştığını anlamaya çalışıyorum. Bir faaliyetin onCreate benim hizmetini bağlayan ama OnStop veya OnDestroy bunu unbind yoksa , ben hata alıyorum:Servis bağlantısı sızdırmak ne anlama geliyor?

Yani
android.app.ServiceConnectionLeaked: Service com.google.ipc.invalidation.ticl.android.AndroidInvalidationService has leaked ServiceConnection com.googl 
           e.i[email protected]4177f8f8 that was originally bound here 

sorum şu: Sorun bir bağlantı sızıntı ile tam olarak ne , hizmetimi açarak ne önleyebilirim? Android işletim Activity yok eder ve A ServiceConnection hala çalışan Service binded sonucuna varmıştır, böylece Activity Tipik

cevap

33

Hizmetin erişebilir tek app (ya da bunun için bir kullanım var). Uygulamanızı hala bu Hizmet ile çalıştırıyorsanız, o Hizmet'in artık bir amacı yoktur. Bellek tüketen kaynaklarda var olacak ama hiçbir şey yapmıyor. İşiniz bittiğinde Hizmetinizi açıp kapatarak, bu kaynakları diğer uygulamalar tarafından kullanılabilecek şekilde döndürürsünüz.

Oyuncaklarını bir odaya yayan ve sonra bırakan bir çocuk düşünün. Evdeki herkes (ebeveynler, kardeşler ve misafirler) onlar için hiçbir faydası yok ve her şeyin etrafında yürümeli. Oyuncaklar sadece yoldaydı. Çocuğun onları uzaklaştırması durumunda, o zaman istediği her şey odayı kullanabilir.

Bu yardımcı olur umarım!

+1

Netleştirmek için: sistem, bir hizmetin hala kullanılmakta olup olmadığını öğrenmek için bağlama sistemini kullanır. StartService'in çağrılmadığı durumlarda özellikle önemlidir, çünkü bu durumda onu öldürecek bir çerçevedir, bu nedenle etkinlik yok edildiğinde bir hizmeti engellememek sistemin verimli bir şekilde yapmasını engeller. – Teovald

41

uygulamanızı tahrip önce bu hizmeti Unbind gerektiğinde olur

+7

+1! Konuyla ilgili en yararlı cevaplardan biri, özellikle verilen * harika * analoğu sayesinde! – Swayam

+0

iyi ve kolay anlaşılabilir bir yanıt – Ranjit

+0

ama başka bir etkinlik kullanırken ben de çalışmaya devam etmesini istiyorum. Bunu yapmak için servisimde START_STICKY kullandım ancak hizmetimi engellerseniz dururdum .. (bir aygıttan veri indiriyor) – JourneyWithAndroid

2

Hizmetler, etkinlik kapatıldıktan sonra bile hala çalışıyor. Yani kaynağı onStop veya onDestroy'da çözmeniz gerekir.