Не удается принудительно закрыть приложение без его перезапуска?

#java #android #kotlin

#java #Android #kotlin

Вопрос:

Я использую этот код для принудительного закрытия моего приложения через 1 секунду. Но проблема в том, что оно перезапускается само после закрытия! Как я могу заставить его закрыться навсегда?

   private fun endApp() {

    val handler = Handler()
    handler.postDelayed({ Process.sendSignal(Process.myPid(), Process.SIGNAL_KILL) }, 1000)
  }
  

Комментарии:

1. Я предполагаю, что это связано с тем, что, когда вы завершаете процесс, Android предполагает, что приложение завершило работу и автоматически перезапускает его. Если проблема в этом, решением было бы найти другой способ выйти из приложения, не прерывая процесс таким образом. Проверьте, работает ли это: tutorialspoint.com/how-to-quit-application-programmatically

Ответ №1:

Используйте этот метод для принудительного выхода из вашего приложения:

 fun exitApp() {
    moveTaskToBack(true);
    exitProcess(0)
}
  

ExitProcess(status: Int): завершает текущий запуск
процесс.

moveTaskToBack (логическое значение nonRoot) Перемещает задачу, содержащую это действие, в конец стека действий. Порядок действий в задаче не изменился.

или

finishAffinity(): завершите это действие, а также все действия непосредственно под ним в текущей задаче, которые имеют такое же сходство. Обычно это используется, когда приложение может быть запущено для перехода к другой задаче (например, из ACTION_VIEW понятного ему типа контента), и пользователь использовал навигацию вверх, чтобы переключиться с текущей задачи на свою собственную задачу. В этом случае, если пользователь перешел к каким-либо другим действиям второго приложения, все они должны быть удалены из исходной задачи как часть переключения задач.

 fun exitApp() {
    finishAffinity()
}
  

Комментарии:

1. Ваш код закрывает мое приложение без перезапуска, это хорошо! Но проблема в том, что у меня запущена служба (с уведомлением), и она закрывает и перезапускает ее… (Протестировано на Android 8.1) Итак, ваш ответ решил половину моей проблемы.

2. Подводя итог, moveTaskToBack(true); exitProcess(0) приложение успешно закрывается, но перезапускается его служба. И finishAffinity закрывает приложение, но продолжает работу его службы.

3. Я хочу закрыть приложение И завершить работу всех его служб. Спасибо за ваше время!

4. @Bandy вы нашли решение?