Как уничтожить / kill a service?

#java #android #android-service

#java #Android #android-сервис

Вопрос:

В моем приложении запущена служба для обнаружения встряхивания, однако в моем MainActivity у меня есть кнопка для выхода пользователя из системы, с помощью которой я должен выйти из системы и завершить работу службы, которая обнаруживает событие встряхивания.

мой метод выхода из системы в моем MainActivity:

 public void signOutAndFinish(){
    //Stop Shakeservice
    Intent intent = new Intent(this, ShakeService.class);
    stopService(intent);
    //Go to login activity
    Intent iLoginView = new Intent(this, LoginActivity.class);
    startActivity(iLoginView);
}
  

однако, если я встряхну свое устройство после выхода из системы, служба распознает встряску, как будто она не убьет его немедленно:

 Intent intent = new Intent(this, ShakeService.class);
stopService(intent);
  

Код в методе onDestroy является:

 @Override
public void onDestroy() {
    super.onDestroy();
}
  

Как я могу завершить работу службы, чтобы при выходе из системы служба умирала?

Спасибо за вашу помощь!

Ответ №1:

Вы можете отправить широковещательную рассылку о своей активности в onDestroy() методе вашего сервиса, а затем выполнить выход из системы.

Вот несколько примеров кода вышеупомянутой идеи:

Это для вашего сервиса:

 @Override
public void onDestroy() {
    super.onDestroy();
    Intent intent = new Intent();
    intent.setAction("com.example.broadcast.MY_NOTIFICATION");
    intent.putExtra("data","Notice for logout!");
    sendBroadcast(intent);
}
  

И это для вашей активности:

 private BroadcastReceiver br = new MyBroadcastReceiver();

@Override
public void onCreate() {
  IntentFilter filter = new IntentFilter("com.example.broadcast.MY_NOTIFICATION");
  registerReceiver(br, filter);
}

@Override
public void onDestroy() {
  unregisterReceiver(br);
}

// An inner class at your activity
public class MyBroadcastReceiver extends BroadcastReceiver {
    private static final String TAG = "MyBroadcastReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        YourActivity.this.finish();
        // or do anything you require to finish the logout...
    }
}
  

Ответ №2:

однако, если я встряхну свое устройство после выхода из системы, служба распознает встряску

Тогда, по-видимому, вы не очистили свои Sensor данные в onDestroy() методе службы.

Как я могу завершить работу службы, чтобы при выходе из системы служба умирала?

Вы делаете это сейчас. Однако, если вы что-то настроили в службе, например, прослушивание событий из SensorManager , вам нужно это очистить, обычно в onDestroy() службе.