最近在做毕业设计,想做个音乐播放器,于是就用到的绑定服务的知识,绑定服务做完了以后,可以正常播放音乐,但是退出时程序没有奔溃,但是logcat却打印一堆错。
Activity example.com.xinyuepleayer.activity.MusicPlayerActivity has leaked ServiceConnection example.com.xinyuepleayer.activity.MusicPlayerActivity$1@d8ea8c8 that was originally bound here
android.app.ServiceConnectionLeaked: Activity example.com.xinyuepleayer.activity.MusicPlayerActivity has leaked ServiceConnection example.com.xinyuepleayer.activity.MusicPlayerActivity$1@d8ea8c8 that was originally bound here
at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:1094)
at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:988)
at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1313)
at android.app.ContextImpl.bindService(ContextImpl.java:1296)
at android.content.ContextWrapper.bindService(ContextWrapper.java:614)
at example.com.xinyuepleayer.activity.MusicPlayerActivity.bindServiceAndStart(MusicPlayerActivity.java:75)
at example.com.xinyuepleayer.activity.MusicPlayerActivity.onCreate(MusicPlayerActivity.java:65)
at android.app.Activity.performCreate(Activity.java:6303)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2376)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2483)
at android.app.ActivityThread.access$900(ActivityThread.java:153)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5441)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)
这里看到报错的地方是bindService这个方法报错。
at example.com.xinyuepleayer.activity.MusicPlayerActivity.bindServiceAndStart(MusicPlayerActivity.java:75)
at example.com.xinyuepleayer.activity.MusicPlayerActivity.onCreate(MusicPlayerActivity.java:65)
解决办法就是加上下面代码
@Override
protected void onDestroy() {
super.onDestroy();
//解除绑定
unbindService(con);
}
就是退出时解除绑定,就跟广播一样差不多。