У меня есть приложение для Android, в котором я реализую Службу, которая взаимодействует с некоторыми аппаратными средствами через последовательное соединение Bluetooth. Установка этой связи идет медленно, поэтому я решил оставить службу на переднем плане, так что если/когда вы хотите просмотреть другое приложение, соединение готово к работе (псевдокод следует):Остановка службы переднего плана на Android при сбое приложения
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
start();
return (START_STICKY);
}
@Override
public void onDestroy() {
stop();
}
start()
и stop()
частные методы, которые начинают связь с аппаратными средствами, и в случае, если начать, в создает Notification
для использования в startForeground()
Мои Activity
позвонит
@Override
public void onStart() {
super.onStart();
// Start the service
Intent intent = new Intent(getApplicationContext(), MyService.class);
ComponentName theService = startService(intent);
//this is to register the functions I need to handle functions my Activity calls
// to the service
bindService(intent, svcConn, BIND_AUTO_CREATE);
}
@Override
public void onStop() {
super.onStop();
if (theService != null) {
unbindService(svcConn);
theService = null;
if (isFinishing()) {
stopService(new Intent(getApplicationContext(), MyService.class));
}
}
}
Я должен был добавить «Quit» пункт меню, чтобы убедиться, что Service
выключается. Хуже того, если мое приложение выходит из строя, я должен войти и вручную убить Service
. Есть ли способ элегантно убить Service
, если все идет ужасно неправильно, или я злоупотребляю целью Service
и должен найти альтернативный метод выполнения того, что я хотел бы сделать?