stopService并停止获取消息

时间:2019-02-06 08:17:43

标签: java android android-service

我想停止我的服务,并停止向活动中的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);
}

1 个答案:

答案 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;
}