Как уничтожить / убить сервис? - PullRequest
1 голос
/ 30 марта 2019

В моем приложении запущен сервис для обнаружения дрожания, однако в 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();
}

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

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

Ответы [ 2 ]

1 голос
/ 30 марта 2019

Вы можете отправить трансляцию обратно своей активности с помощью метода 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...
    }
}
0 голосов
/ 30 марта 2019

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...