Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 服务连接泄漏_Android_Android Service - Fatal编程技术网

Android 服务连接泄漏

Android 服务连接泄漏,android,android-service,Android,Android Service,我有一个非常基本的服务程序,但我收到了这个警告信息 02-11 04:58:23.383: E/ActivityThread(1686): Activity com.example.serviceexample.Client has leaked ServiceConnection com.example.serviceexample.Client$1@416e56e8 that was originally bound here 02-11 04:58:23.383: E/ActivityTh

我有一个非常基本的服务程序,但我收到了这个警告信息

02-11 04:58:23.383: E/ActivityThread(1686): Activity com.example.serviceexample.Client has leaked ServiceConnection com.example.serviceexample.Client$1@416e56e8 that was originally bound here
02-11 04:58:23.383: E/ActivityThread(1686): android.app.ServiceConnectionLeaked: Activity com.example.serviceexample.Client has leaked ServiceConnection com.example.serviceexample.Client$1@416e56e8 that was originally bound here
02-11 04:58:23.383: E/ActivityThread(1686):     at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:974)
02-11 04:58:23.383: E/ActivityThread(1686):     at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:868)
02-11 04:58:23.383: E/ActivityThread(1686):     at android.app.ContextImpl.bindServiceAsUser(ContextImpl.java:1452)
02-11 04:58:23.383: E/ActivityThread(1686):     at android.app.ContextImpl.bindService(ContextImpl.java:1440)
02-11 04:58:23.383: E/ActivityThread(1686):     at android.content.ContextWrapper.bindService(ContextWrapper.java:496)
02-11 04:58:23.383: E/ActivityThread(1686):     at com.example.serviceexample.Client.onStart(Client.java:72)
02-11 04:58:23.383: E/ActivityThread(1686):     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1171)
02-11 04:58:23.383: E/ActivityThread(1686):     at android.app.Activity.performStart(Activity.java:5143)
02-11 04:58:23.383: E/ActivityThread(1686):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
02-11 04:58:23.383: E/ActivityThread(1686):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
02-11 04:58:23.383: E/ActivityThread(1686):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
02-11 04:58:23.383: E/ActivityThread(1686):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
02-11 04:58:23.383: E/ActivityThread(1686):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-11 04:58:23.383: E/ActivityThread(1686):     at android.os.Looper.loop(Looper.java:137)
02-11 04:58:23.383: E/ActivityThread(1686):     at android.app.ActivityThread.main(ActivityThread.java:5103)
02-11 04:58:23.383: E/ActivityThread(1686):     at java.lang.reflect.Method.invokeNative(Native Method)
02-11 04:58:23.383: E/ActivityThread(1686):     at java.lang.reflect.Method.invoke(Method.java:525)
02-11 04:58:23.383: E/ActivityThread(1686):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
02-11 04:58:23.383: E/ActivityThread(1686):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-11 04:58:23.383: E/ActivityThread(1686):     at dalvik.system.NativeStart.main(Native Method)
服务器类:

public class Server extends Service{

IBinder mBinder = new LocalBinder();

@Override
public IBinder onBind(Intent intent) {
return mBinder;
}


public class LocalBinder extends Binder {
 public Server getServerInstance() {

 return Server.this;
  }
 }

public String getTime() {
SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return mDateFormat.format(new Date());
   }
 }

请让我知道我能做些什么来解决这个logcat消息。我可以在第72行看到一些问题。但是我不知道怎么解决它。请帮助。

您尚未解除服务绑定。只有当您忘记停止或解除绑定服务时,服务连接泄漏才会出现

查看您的代码。当您尝试解除服务绑定时,您的
mBounded
为false,因为您在serviceconnection接口的servicedisconnected方法中使其为false,这会阻碍解除服务绑定

看看你做了什么:

public void onServiceDisconnected(ComponentName name) {
Toast.makeText(Client.this, "Service is disconnected", 1000).show();
mBounded = false;//here you make false to the boolean variable which make obstacle to unbind your service
mServer = null; }
删除mBounded=false从这里开始

您必须了解,连接断开()服务解除绑定()不同

在绑定服务时,您必须使其成为现实。i、 e:

Intent mIntent = new Intent(this, Server.class);
bindService(mIntent, mConnection,Context.BIND_AUTO_CREATE);
mBound = true;
在解除绑定服务后,使布尔变量false不在serviceconnection内。例如:

 if(mBound){
 unbindService(mConnection);
 mBounded = false;
 }

这将解决您的问题。

此服务开始时,您还会问一个问题吗?我看不到任何连接和断开服务的位置。。。
 if(mBound){
 unbindService(mConnection);
 mBounded = false;
 }