2012-05-01 3 views
2

Je développe une application sur un lecteur de musique. Je suis confronté à une erreur comme.Android Audio Service a fuité Connexion Service

« * .MusicPlayerTabWidget a fui ServiceConnection *

S'il vous plaît vous ont offert des commentaires concernant ce sujet. Je partage mon Logcat pour cela aussi.

05-01 10:38:03.226: W/KeyCharacterMap(4225): Using default keymap 
05-01 10:38:03.429: E/ActivityThread(4225): Activity com.pvMusic.pvm.MusicPlayerTabWidget has leaked ServiceConnection [email protected] that was originally bound here 
05-01 10:38:03.429: E/ActivityThread(4225): android.app.ServiceConnectionLeaked: Activity com.pvMusic.pvm.MusicPlayerTabWidget has leaked ServiceConnection [email protected] that was originally bound here 
05-01 10:38:03.429: E/ActivityThread(4225):  at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:938) 
05-01 10:38:03.429: E/ActivityThread(4225):  at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:833) 
05-01 10:38:03.429: E/ActivityThread(4225):  at android.app.ContextImpl.bindService(ContextImpl.java:879) 
05-01 10:38:03.429: E/ActivityThread(4225):  at android.content.ContextWrapper.bindService(ContextWrapper.java:347) 
05-01 10:38:03.429: E/ActivityThread(4225):  at com.pvMusic.pvm.MusicPlayerTabWidget.onStart(MusicPlayerTabWidget.java:175) 
05-01 10:38:03.429: E/ActivityThread(4225):  at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129) 
05-01 10:38:03.429: E/ActivityThread(4225):  at android.app.Activity.performStart(Activity.java:3791) 
05-01 10:38:03.429: E/ActivityThread(4225):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1624) 
05-01 10:38:03.429: E/ActivityThread(4225):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
05-01 10:38:03.429: E/ActivityThread(4225):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
05-01 10:38:03.429: E/ActivityThread(4225):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
05-01 10:38:03.429: E/ActivityThread(4225):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-01 10:38:03.429: E/ActivityThread(4225):  at android.os.Looper.loop(Looper.java:130) 
05-01 10:38:03.429: E/ActivityThread(4225):  at android.app.ActivityThread.main(ActivityThread.java:3687) 
05-01 10:38:03.429: E/ActivityThread(4225):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-01 10:38:03.429: E/ActivityThread(4225):  at java.lang.reflect.Method.invoke(Method.java:507) 
05-01 10:38:03.429: E/ActivityThread(4225):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
05-01 10:38:03.429: E/ActivityThread(4225):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
05-01 10:38:03.429: E/ActivityThread(4225):  at dalvik.system.NativeStart.main(Native Method) 
05-01 10:39:31.859: D/dalvikvm(4225): GC_EXPLICIT freed 166K, 46% free 3022K/5575K, external 557K/1031K, paused 52ms 
05-01 10:39:31.906: D/dalvikvm(4225): GC_CONCURRENT freed 0K, 46% free 3022K/5575K, external 557K/1031K, paused 4ms+3ms 

Plus sur que si vous avez des tutoriels de référence pour le lecteur de musique s'il vous plaît partager avec moi ..

Répondre

7

Ajoutez unbindService(mConnection); dans votre méthode onstop(). Le code va commencer à fonctionner correctement.

+0

Pouvez-vous expliquer mieux? Je ne sais pas où le mettre –

+0

@StefanoMunarini lire le cycle de vie Android! (dans ce cas, le cycle de vie de l'activité) –

2

Vous essayez de montrer quelque chose après que vous êtes l'activité de sortie (votre fil est revenu).

3

Si vous effectuez une liaison locale au service au sein de votre activité, vous devez vous assurer que vous vous déconnectez du service chaque fois que votre activité est fermée. Sinon, l'application commencera à fuir la connexion comme dans votre erreur.

+0

Je sais que c'est une vieille question, mais j'ai besoin d'aide! Dites si besoin de service à exécuter dans le service android de fond, nous ne pouvons pas appeler 'bindService (nouvelle Intent (IRecordService.class.getName()), mServiceConnection, Context.BIND_AUTO_CREATE); ?? –

+0

Que dois-je faire si je veux conserver le service dans la notification en attente d'intention? Ex: - J'ai cliqué sur l'activité pour l'enregistrement Audio avec notification 'enregistrement' Si vous cliquez sur le bouton de retour si appel 'unbindService, il va arrêter le recodage !! Est-ce que je pense que je dois changer "liaison locale au service à l'intérieur de votre activité" à startService http://stackoverflow.com/questions/3514287/android-service-startservice-and-bindservice –

0

comme indiqué here, vous devez remplacer le onDestroy et fermer la boîte de dialogue qui s'exécute après la fermeture de l'activité.

0

Cela peut également se produire lorsque votre service a enregistré un BroadcastReceiver et qu'il ne s'est pas désinscrit.

Alors s'il vous plaît annuler l'inscription dans OnDestroy

unregisterReceiver(mReceiver); 
0

Si vous liez à getApplicationContext() au lieu, la liaison fonctionnera aussi longtemps que votre application est en cours d'exécution. Si vous vous liez à getContext(), et que le contexte de l'activité est détruit, android remarque que vous n'avez pas fermé la connexion liée à ce contexte.