我想停止我的服务,并停止向活动中的ma处理程序获取数据。我将服务连接到USB并从该端口获取数据。
我尝试这样做:
usbService.stopSelf();
Intent intent = new Intent(MainMenu.this, UsbService.class);
usbService.stopService(intent);
但是我一直都在从服务中获取数据。
我就这样开始服务:
private void startService(Class<?> service, ServiceConnection serviceConnection, Bundle extras) {
if (!UsbService.SERVICE_CONNECTED) {
Intent startService = new Intent(this, service);
if (extras != null && !extras.isEmpty()) {
Set<String> keys = extras.keySet();
for (String key : keys) {
String extra = extras.getString(key);
startService.putExtra(key, extra);
}
}
startService(startService);
}
Intent bindingIntent = new Intent(this, service);
bindService(bindingIntent, serviceConnection, Context.BIND_AUTO_CREATE);
}
答案 0 :(得分:0)
您需要先通过调用unBindService解除绑定服务。 如您在Service documentation中看到的:
请注意,如果停止的服务仍然具有ServiceConnection对象 与BIND_AUTO_CREATE设置绑定到它,它不会被销毁 直到所有这些绑定都被删除。请参阅服务文档 有关服务生命周期的更多详细信息。
您需要先取消绑定到该服务的所有对象的绑定,然后再停止该服务,以销毁该服务。
编辑:回答您的问题。添加一个布尔变量mBound。覆盖这些方法。
public void onServiceConnected(ComponentName className, IBinder service) {
mBound = true;
}
public void onServiceDisconnected(ComponentName arg0) {
mBound = false;
}
在活动的onStop方法中,添加以下内容:
@Override
public void onStop()
{
super.onStop();
if (mBound) {
try {
unbindService(mConnection);
} catch (java.lang.IllegalArgumentException e)
{
//handle exception here
}
}
mBound = false;
}