Android выход из приложения - PullRequest
1 голос
/ 31 августа 2011

не рекомендуется выходить из приложения напрямую, поэтому цель - завершить все действия, чтобы все перешло в фоновый режим, а пользователь вернулся на домашний экран. Моя проблема в том, что у меня есть основной вид деятельности, который всегда запускается с флагами Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP, и он запускает другое действие, где я хочу разместить кнопку выхода. Для того, чтобы получить все на заднем плане, я должен закончить как текущую, так и основную деятельность. Я думал, что запуск основного действия с этими флагами и дополнительной информацией, которую он должен завершить, сделает свое дело, но дополнительные функции, доставленные с намерением, не достигают основного действия - он все еще получает намерение, которое использовал android для запуска приложения.

Другими словами, я пробовал что-то вроде:

// Exit's onClick:
Intent intent = new Intent(someContext, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("exit", true);
context.startActivity(intent);
currentActivity.finish();

// MainActivity onCreate:
Bundle extras = getIntent().getExtras();
if (extras != null)
{
  // application never reach this point
  boolean exit = extras.getBoolean("exit");
  if (exit)
  {
    finish();
    return;
  }
}

Экстры доставляются. Как я могу заставить его работать?

Спасибо

Ответы [ 6 ]

3 голосов
/ 31 августа 2011

При установке этих 2 флагов MainActivity не будет достигать onCreate (), если он все еще находится в стеке.Это вызвало бы onNewIntent ().

Проверьте эти 2 ссылки для получения дополнительной информации:

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP

http://developer.android.com/reference/android/app/Activity.html#onNewIntent%28android.content.Intent%29

1 голос
/ 14 мая 2012
System.Exit(0);

// Вы можете использовать это для выхода из всего приложения, а не только из одного действия

0 голосов
/ 18 мая 2013

Просто, создайте класс и поместите статическую переменную и функцию, подобную этой:

public static boolean isExit = false;

public static boolean CheckExit() {
 return isExit;
}

public static void setisExit(boolean b)
{
isExit = b;
}

И в вашей основной операции, поставив YourClassName.setisExit(false);, вы убедитесь, что значение isExit равно false, когда приложение снова запустится..

Для выхода:

Поместите это в ваш OnClick метод:

YourClassName.setisExit(true);
finish();

И поместите это в первую строку OnResume метода каждого действия:

if(YourClassName.CheckExit()) {
    finish();
     return super.onResume();
   }

Делая это каждый раз, когда возобновляется Активность, проверьте значение isExit и, если true, выйдите.

Вы можете проверить мое приложение E Player в Google Play.Я реализовал этот метод и он работает нормально

0 голосов
/ 07 мая 2013

вызовите moveTaskToBack (true) для вашей активности

0 голосов
/ 17 июня 2012

Я не знаю, является ли это лучшим решением, но работайте со мной:

При прослушивании событий:

int pid = android.os.Process.myPid(); 
android.os.Process.killProcess(pid); 
0 голосов
/ 31 августа 2011

Установите режим запуска MainActivity как "SingleTop" в AndroidManifest.xml файле следующим образом:

android:launchMode="singleTop"
...