Android开发之服务连接泄露异常

来源:互联网 发布:exec php 编辑:程序博客网 时间:2024/04/30 18:05

        写了个Android service,用来完成一些耗时的网络IO和远程设备连接。在Activity中,先用startService( )启动服务,然后调用bindService( )将Activity邦定到该服务上,最后执行程序。看起来程序运行没有问题,不过Log显示出现一个异常,如下:

E/ActivityThread(12467): Activity com.raycommtech.rayfastcfg.wlan.WifiConfigNavigateActivity has leaked ServiceConnection com.raycommtech.rayfastcfg.wlan.WifiConfigNavigateActivity$1@40529ba8 that was originally bound hereE/ActivityThread(12467): android.app.ServiceConnectionLeaked: Activity com.raycommtech.rayfastcfg.wlan.WifiConfigNavigateActivity has leaked ServiceConnection com.raycommtech.rayfastcfg.wlan.WifiConfigNavigateActivity$1@40529ba8 that was originally bound hereE/ActivityThread(12467): at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:938)E/ActivityThread(12467): at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:833)E/ActivityThread(12467): at android.app.ContextImpl.bindService(ContextImpl.java:933)E/ActivityThread(12467): at android.content.ContextWrapper.bindService(ContextWrapper.java:347)E/ActivityThread(12467): at com.raycommtech.rayfastcfg.wlan.WifiConfigNavigateActivity.onStart(WifiConfigNavigateActivity.java:81)E/ActivityThread(12467): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129)E/ActivityThread(12467): at android.app.Activity.performStart(Activity.java:3833)E/ActivityThread(12467): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1624)E/ActivityThread(12467): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)E/ActivityThread(12467): at android.app.ActivityThread.access$1500(ActivityThread.java:117)E/ActivityThread(12467): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)E/ActivityThread(12467): at android.os.Handler.dispatchMessage(Handler.java:99)E/ActivityThread(12467): at android.os.Looper.loop(Looper.java:130)E/ActivityThread(12467): at android.app.ActivityThread.main(ActivityThread.java:3691)E/ActivityThread(12467): at java.lang.reflect.Method.invokeNative(Native Method)E/ActivityThread(12467): at java.lang.reflect.Method.invoke(Method.java:507)E/ActivityThread(12467): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)E/ActivityThread(12467): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)E/ActivityThread(12467): at dalvik.system.NativeStart.main(Native Method)
看提示是ServiceConnection在使用的时候出现泄露了,原因是由于bind到service后,没有调用unbind进行释放。这个跟C/C++里的内存泄露应该是一类问题,资源使用完没有释放。

解决办法:程序退出前调用unbindService( )释放服务连接



原创粉丝点击