Есть ли какая-либо функция обратного вызова службы android, которая вызывается после System.exit ()? - PullRequest
2 голосов
/ 20 марта 2020

У меня есть кнопка, которая должна завершать sh всего приложения при нажатии. Нажатие кнопки открывает диалог, и после того, как пароль вставлен, положительный слушатель диалога должен закрыть приложение. Это положительный код прослушивателя диалога:

.setPositiveButton("Done", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        boolean res = ApplicationDataManager.checkEntryDetails(userName.getText(), password.getText());
                        if(res){
                            logger.writeLog(LogType.INFO, TAG, "createDialog. Session ended.");
                            //message for ending session.
                            Toast.makeText(MenuActivity.this, "Session successfully ended!",
                                    Toast.LENGTH_SHORT).show();


                            // stop both sensors and video recording.
                            stopService(sensorIntent);
                            stopService(videoRecordIntent);
                            menuActivityReference.finishAffinity();
                            System.exit(0);

                        }else{
                            logger.writeLog(LogType.INFO, TAG, "createDialog. wrong username or password for End Session");
                            //message for wrong input
                            Toast.makeText(MenuActivity.this, "Wrong user name or password! Please try again.",
                                    Toast.LENGTH_SHORT).show();
                            //show dialog again for retry.
                            showDialog();
                        }

У меня есть несвязанная служба, которая останавливается stopService(sensorIntent); и запускается так:

// create and start the sensors and video recording services in the background.
        sensorIntent = new Intent(this, SensorsService.class);
        sensorIntent.putExtra(PATIENT_KEYWORD, patient);
        sensorIntent.putExtra(SENSORS_FILE_PATH, sensorFile);
        startService(sensorIntent);

, но, к сожалению, Сервисная функция onDestroy () не вызывается.

    public void onDestroy() {
        logger.writeLog(LogType.INFO, TAG, "onDestroy. Unregistering sensors");
        // unregister all of the sensors from sensorManager listener.
        for (Sensor s : sensorList) {
            sensorManager.unregisterListener(this, s);
        }
        super.onDestroy();
    } 

Для ясности я хочу закрыть приложение, когда нажата положительная кнопка (и пароль верен).

У меня есть регистратор, который пишет в файл, когда метод вызывается, поэтому я знаю, что он не вызывается. Также пытался отлаживать и не попал туда. После звонка на stopService(sensorIntent); я закрываю приложение следующими строками:

menuActivityReference.finishAffinity();
System.exit(0);

, а menuActivityReference - это просто ссылка на действие. (Это делается из прослушивателя кнопок, поэтому я не могу использовать ключевое слово this).

После широкого поиска я увидел, что onDestroy() не всегда вызывается (по крайней мере, не сразу) поэтому мои вопросы:

  1. Что-то не так с этим поведением? Должен ли я завершить sh мое приложение по-другому?
  2. Есть ли обратный вызов, который вызывается в android после System.exit()?
  3. Если нет, то является ли хорошей практикой реализация функции, которая будет выполнять то же действие, что и мой onDestroy(), и вызывать ее до stopService()?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...