stopService и прекратить получать сообщение - PullRequest
0 голосов
/ 06 февраля 2019

Я хочу остановить свой сервис и прекратить получать данные в мой обработчик, который у меня есть в действии.И сервис я подключаю к 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 голосов
/ 06 февраля 2019

Сначала необходимо отменить привязку вашего сервиса, вызвав unBindService.Как вы можете видеть в Сервисной документации :

Обратите внимание, что если у остановленной службы все еще есть объекты 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...