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
IunbindService
中:
@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()
)但仍然无法工作。。。