2012-05-01 4 views
2

음악 플레이어에서 응용 프로그램을 개발 중입니다. 나는 같은 오류가 발생했습니다.Android 오디오 서비스가 유출되었습니다. 서비스 연결

'* .MusicPlayerTabWidget이 누출 된 ServiceConnection *이

당신이에 대한 의견을 주었다하십시오. 내 Logcat도 이에 대해 공유합니다.

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 

당신은 음악 플레이어에 대한 참조 자습서가 있다면 나와 함께 공유하시기를 통해 더 많은 .. 당신은 출구 활동 (스레드가 돌아왔다)있어 이후에 뭔가를 보여주기 위해 노력하고

답변

7

onstop() 방법에 unbindService(mConnection);을 추가하십시오. 코드가 제대로 작동하기 시작합니다.

+0

더 잘 설명 할 수 있습니까? 어디에 넣을 지 모르겠다 –

+0

@StefanoMunarini가 Android 라이프 사이클을 읽습니다! (이 경우 활동 라이프 사이클) –

2

.

3

내 활동 내 로컬 바인딩을 수행하는 경우 활동이 닫힐 때마다 서비스 연결을 해제해야합니다. 그렇지 않으면 응용 프로그램에서 오류가 발생한 것처럼 연결 누출이 시작됩니다.

+0

나는 이것이 오래된 질문이라는 것을 알고 있지만 도움이 필요하다! 백그라운드 안드로이드 서비스에서 실행할 서비스가 필요하다면 bindService (new Intent (IRecordService.class.getName()), mServiceConnection, Context.BIND_AUTO_CREATE); ' ?? –

+0

Pending Intent 알림에서 서비스를 계속 사용하려면 어떻게해야합니까? 예 : - '녹음'알림으로 오디오를 녹음하기위한 활동을 클릭했습니다. 'unbindService'를 호출하면 뒤로 버튼을 누르면 녹음이 중단됩니다 !! 당신은 내 서비스를 지역 서비스로 바꾸어야한다고 생각하십니까? 시작 서비스 http://stackoverflow.com/questions/3514287/android-service-startservice-and-bindservice –

0

그림은 here이므로 onDestroy을 덮어 쓰고 활동이 닫힌 후에 실행중인 대화 상자를 닫아야합니다.

0

서비스가 BroadcastReceiver를 등록했지만 등록을 취소하지 않은 경우에도 발생할 수 있습니다. 당신이 getApplicationContext에 결합하면

그래서들의 OnDestroy

unregisterReceiver(mReceiver); 
0

에 등록을 취소하십시오() 대신 한 앱이 실행되고 실행됩니다 바인딩. getContext()에 바인드하고 Activity의 컨텍스트가 파기되면 android는 해당 컨텍스트와 관련된 연결을 닫지 않았 음을 알립니다.