Как принудительно остановить приложение Android? - PullRequest
21 голосов
/ 24 февраля 2011

Я хочу принудительно остановить приложение Android, когда нажимаю кнопку «Закрыть».Это мой код.

protected void onCreate(Bundle savedInstanceState) {

  this.setContentView(R.layout.layoutxml);

  this.closeButton = (Button)this.findViewById(R.id.close);

  this.closeButton.setOnClickListener(new OnClickListener() {

    @Override

    public void onClick(View v) {

      finish();

    }

  });

}

На этом моя заявка завершена.Если перейти к Settings -> Applications -> Manage applications -> <my application name>, я вижу, что кнопка «Force Stop» включена.Означает ли это, что мое приложение не было полностью остановлено?

Как я могу полностью завершить свое приложение для Android и отключить кнопку «Принудительный останов» в «Настройках»?Из моего ограниченного опыта, когда в приложении возникает «Исключение» (например, NullPointerException), оно ненормально останавливается, выглядит так, будто полностью завершено, и кнопка «Стоп» выглядит отключенной.

Ответы [ 5 ]

37 голосов
/ 24 февраля 2011

Другой способ -

android.os.Process.killProcess(android.os.Process.myPid());

Не думаю, что это так уж плохо, если вы поместите эти вызовы в onDestroy().(Если вы убьете свой процесс в середине обработки событий, могут произойти все виды плохих вещей - например, фокусировка касанием, попадающая в эфир.), который должен просто вызвать finish() и позволить ОС позаботиться о прекращении вашего процесса, когда / если это потребуется.

13 голосов
/ 17 декабря 2015

Примечание: Это не убивает все приложение, но если вы хотите завершить все действия приложения, это лучший вариант.

Android ≥ 16

finishAffinity();

Android <16 </h3> ActivityCompat.finishAffinity(Activity activity) Надеюсь, это поможет

3 голосов
/ 24 февраля 2011

Плохой способ убить приложение будет System.exit(0)

Edit: Я считаю, что я должен некоторые объяснения. Android обрабатывает жизненный цикл приложения самостоятельно, и вы не должны «принудительно закрывать» его, и я не знаю какого-либо хорошего способа сделать это. Как правило, это нормально, если ваше приложение все еще живо в фоновом режиме, поэтому, если пользователь запускает его снова, оно быстро всплывает.

0 голосов
/ 09 мая 2019

Я знаю, что это поздний ответ, надеюсь, это поможет кому-то.

Вы можете попробовать finishAndRemoveTasks(); вместо finish(); в своем фрагменте.

Это убьет все ваше приложениедействия и все процессы и даже удалить для недавних приложений из диспетчера задач.

Примечание. Если вы используете в своем коде любой тип handler или thread, убедитесь, что вы удалили его функциональные возможности, а затем используйте приведенные вышепредложенный код, если не будет NullPointer Exception или ResourceNotFound Exception.

0 голосов
/ 01 февраля 2017

Почему бы не сделать Shell-Call для ActivityManager?

try {
      Runtime.getRuntime().exec("am force-stop com.me.myapp");
    } catch (IOException e) {
      e.printStackTrace();
    }
...