12

Я создал приложение для Android с возможностью выхода из системы в onCreateOptionsMenu. Выход из системы работает отлично, но когда я снова нажимаю кнопку «Назад», он возвращает меня к предыдущему действию, и когда он получает нулевое значение, он перенаправляется на экран входа в систему. Теперь мой экран входа появляется снова и снова. Я хочу полностью закрыть приложение, когда я нажимаю кнопку «Назад», но не знаю, как это сделать.как закрыть приложение Android полностью

Вот мой код, чтобы обрабатывать кнопку назад нажмите на экране входа в систему:

@Override 
public void onBackPressed() { 
    new AlertDialog.Builder(this) 
     .setTitle("BidNEMO") 
     .setMessage("Are you sure you want to exit?") 
     .setNegativeButton(android.R.string.no, null) 
     .setPositiveButton(android.R.string.yes, new OnClickListener() { 
     public void onClick(DialogInterface arg0, int arg1) { 
     Main.super.onBackPressed(); 
     finish(); 
     } 
     }).create().show(); 
    } 

пожалуйста помочь guyss ..

+0

Попробуйте [this] (http://stackoverflow.com/a/14316135/1777090) –

+0

Возможный дубликат [Android: правильный способ использования onBackPressed()] (http://stackoverflow.com/questions/6413700/ android-proper-way-to-use-onbackpressed) –

ответ

46

Для Quit Application на использовании кнопки мыши этот код:

Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_HOME); 
startActivity(intent); 

Попробуйте ..

Чтобы убить полное приложение и ремо ve от Running список приложений убивает приложение через его pid (его противный) ... используйте эти строки перед кодом выше.

int pid = android.os.Process.myPid(); 
android.os.Process.killProcess(pid); 
+1

thanx..it отлично работает ... – Brett

+3

вы просто звоните домой через намерение. Как это отличается от назначения другого действия. Я не думаю, что приложение закроется. вместо этого он минимизирует. – SMR

+0

Что вам нужно? – ryderz8

5

Чтобы закончить активность, я использую этот код:

public void appExit() { 
    this.finish(); 
    Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
} //close method 

или убить процесс с помощью этого кода:

int pid = android.os.Process.myPid(); 
android.os.Process.killProcess(pid); 
+0

KillProcess должен быть killProcess, первая буква K будет небольшой k, исправлена. – David

+0

спасибо Дэвиду, я не заметил. – chiru

0

Даже если это выглядит нормально процесс убийства заставит вас головная боль в будущем. Вы можете убедиться в этом после использования случай:

  1. вызовов несколько мероприятий по населяющие деятельности стек
  2. вызова android.os.Process.killProcess (PID);
  3. открыть приложение

НАБЛЮДАЕМЫЙ: Ваше приложение открывает не от основной деятельности в непоследовательно. Это связано с тем, что Android рассматривает возможность убийства процесса, например, сбоя.

Вы можете найти более подробную информацию здесь: Is quitting an application frowned upon?

10

Если вы хотите, чтобы закрыть приложение полностью, вы должны использовать finishAffinity(); вместо finish(). Он очистит весь стек действий, ранее открытых приложением.

+1

'finishAffinity()' доступен только на уровне API 16 или выше. –

+1

Я думаю, что это правильный способ выхода из приложения – Jacky

0
android.os.Process.killProcess(android.os.Process.myUid()); 

Я думаю, что это лучше. Как насчет этого?

4

Для Xamarin пользователей:

int pid = Android.OS.Process.MyPid(); 
Android.OS.Process.KillProcess(pid); 

положить его в OnDestroy() функции.

Edit:

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

public override void Finish() 
    { 
     if (Android.OS.Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) 
     { 
      base.FinishAndRemoveTask(); 
     } 
     else 
     { 
      base.Finish(); 
     } 
    } 

это единственное решение для этого вопроса!

Смежные вопросы