Android-我的服务无法绑定,但无法再次绑定

Android-我的服务无法绑定,但无法再次绑定,android,android-activity,android-service,android-service-binding,Android,Android Activity,Android Service,Android Service Binding,我陷入了一个服务绑定的问题,这让我很恼火 我得到了一个绑定服务的活动,用户经常出入该活动 当用户第一次退出活动时,问题就出现了。这将解除服务的绑定,当用户再次进入时,不要再次绑定 活动通过以下方式调用绑定服务: @Override protected void onStart() { super.onStart(); Intent intent = new Intent(this, CService.class); intent.putExtra("id_local",

我陷入了一个服务绑定的问题,这让我很恼火

我得到了一个绑定服务的活动,用户经常出入该活动

当用户第一次退出活动时,问题就出现了。这将解除服务的绑定,当用户再次进入时,不要再次绑定

活动通过以下方式调用绑定服务:

@Override
protected void onStart() {
    super.onStart();
    Intent intent = new Intent(this, CService.class);
    intent.putExtra("id_local", (String) getIntent().getExtras().get("id_local"));
    intent.putExtra("id_send", (String) getIntent().getExtras().get("id_send"));

    bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
    registerReceiver(uiUpdated, new IntentFilter("SERVER_MESAGE"));
    mBound = true;
}
其中,
mConnection
的定义如下:

private ServiceConnection mConnection = new ServiceConnection() {

    @Override
    public void onServiceConnected(ComponentName className,
                                   IBinder service) {
    CService.LocalBinder binder =(CService.LocalBinder) service;
        mService = binder.getService();
        Log.d("Service", "onServiceConnected");
        mBound = true;
    }

    @Override
    public void onServiceDisconnected(ComponentName arg0) {
        Log.d("Service", "onServiceDisconnected");
        mBound = false;
    }
};
onStop
I
unbindService
中:

@Override
protected void onStop() {
    if (mBound) {
        Log.d("ActivityStop", "Stoping activity");
        unregisterReceiver(uiUpdated);
        unbindService(mConnection);
        mBound = false;
    }
    super.onStop();
}
服务中的
onBind
是:

@Override
public IBinder onBind(Intent intent) {

    final String id_local = intent.getStringExtra("id_local");
    final String id_send = intent.getStringExtra("id_send");

    if (!misatgesList.isEmpty()) {
        misatgesList.clear();
    }

    mBackGroundTimer.schedule(new TimerTask() {
        @Override
        public void run() {

            String serverResult = restRecive(id_local, id_send,
                       misatgesList.size());
            if (serverResult != null) {
                misatgesList.addAll(procesMisatges(serverResult,
                             id_local));
                Intent i = new Intent("SERVER_MESAGE");
                i.putExtra("recive", serverResult);
                sendBroadcast(i);
            }
        }
    }, 0, 1000);


    return mBinder;
}
@Override
public boolean onUnbind(Intent intent) {
    mBackGroundTimer.cancel();
    misatgesList.clear();
    Log.d("ServiceOnUnBind", "ServiceOnUnBind");
    //stopSelf();
    return super.onUnbind(intent);
}
onUnBind
就是这个:

@Override
public IBinder onBind(Intent intent) {

    final String id_local = intent.getStringExtra("id_local");
    final String id_send = intent.getStringExtra("id_send");

    if (!misatgesList.isEmpty()) {
        misatgesList.clear();
    }

    mBackGroundTimer.schedule(new TimerTask() {
        @Override
        public void run() {

            String serverResult = restRecive(id_local, id_send,
                       misatgesList.size());
            if (serverResult != null) {
                misatgesList.addAll(procesMisatges(serverResult,
                             id_local));
                Intent i = new Intent("SERVER_MESAGE");
                i.putExtra("recive", serverResult);
                sendBroadcast(i);
            }
        }
    }, 0, 1000);


    return mBinder;
}
@Override
public boolean onUnbind(Intent intent) {
    mBackGroundTimer.cancel();
    misatgesList.clear();
    Log.d("ServiceOnUnBind", "ServiceOnUnBind");
    //stopSelf();
    return super.onUnbind(intent);
}

因此,我的问题是,当活动再次进入时,如何再次绑定服务?或者,在用户进入活动之前,我应该如何保持绑定的活动状态?

当从活动绑定到您的服务时,请使用
getApplicationContext
()API,如下所示:

getApplicationContext().bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

getApplicationContext
返回全局应用程序上下文-与其他上下文的区别在于,例如,当活动结束时,Android可能会破坏(或使活动上下文不可用)。当应用程序对象存在时,应用程序上下文始终可用(未绑定到特定活动)

从活动绑定到服务时,请使用
getApplicationContext
()API,如下所示:

getApplicationContext().bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
getApplicationContext
返回全局应用程序上下文-与其他上下文的区别在于,例如,当活动结束时,Android可能会破坏(或使活动上下文不可用)。当应用程序对象存在时,应用程序上下文始终可用(不与特定活动关联)

我找到了解决方案

我的意思是如何再次调用
onBind
。这是使用
onRebind
完成的,这样您就可以再次调用
onBind

因此,我创建了onRebind:

    @Override
    public void onRebind(Intent intent) {
      super.onRebind(intent);
    }
此外,要使onRebind工作,必须将
onUnbind
中的返回值转换为
true

 @Override
 public boolean onUnbind(Intent intent) {
   mBackGroundTimer.cancel();
   misatgesList.clear();
   Log.d("ServiceOnUnBind", "ServiceOnUnBind");
   //return super.onUnbind(intent);
   return true;
 }
有关更多说明,请查看此处:

我找到了解决方案

我的意思是如何再次调用
onBind
。这是使用
onRebind
完成的,这样您就可以再次调用
onBind

因此,我创建了onRebind:

    @Override
    public void onRebind(Intent intent) {
      super.onRebind(intent);
    }
此外,要使onRebind工作,必须将
onUnbind
中的返回值转换为
true

 @Override
 public boolean onUnbind(Intent intent) {
   mBackGroundTimer.cancel();
   misatgesList.clear();
   Log.d("ServiceOnUnBind", "ServiceOnUnBind");
   //return super.onUnbind(intent);
   return true;
 }

如需更多解释,请查看此处:

由于答案,我尝试将
getApplicationContext()
添加到代码中(在活动的
onStart()
onStop()
中,因为我做了
unbindService()
),但仍然无法工作…感谢答案,我试图将
getApplicationContext()
添加到代码中(在活动的
onStart()
onStop()
中),因为我执行了
unbindService()
)但仍然无法工作。。。