2010-03-01 4 views

ответ

36

Сразу после запуска нового действия, используя startActivity, убедитесь, что вы вызываете finish(), чтобы текущая активность не складывалась за новой.

EDIT Что касается Вашего комментария:

Что вы предлагаете не особенно, как правило, работает андроид поток приложения, и как пользователи ожидают его на работу. То, что вы может сделать, если вы действительно этого хотите, чтобы убедиться, что каждый startActivity, ведущий к этому действию, является startActivityForResult и имеет прослушиватель onActivityResult, который проверяет код выхода и возвращает пузыри обратно. Вы можете read more about that here. В принципе, использовать setResult до завершения деятельности, установить код выхода на ваш выбор, и если ваша материнская деятельность получает этот код выхода, вы установите его в этой деятельности, и закончить это один и т.д ...

+1

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

+0

хорошо назад, увидеть мой выбор. –

2

Почему бы пользователю не просто нажать кнопку «домой»? Затем они могут выйти из вашего приложения из любой вашей деятельности, а не только из конкретной.

Если вы беспокоитесь о том, что ваше приложение продолжает делать что-то в фоновом режиме. Обязательно остановите его в соответствующих командах onPause и onStop (которые будут запускаться при нажатии пользователем Home).

Если ваша проблема в том, что вы хотите, чтобы в следующий раз пользователь нажимал на ваше приложение, чтобы начать с самого начала, я рекомендую поместить на экран какой-то элемент меню или кнопку пользовательского интерфейса, который возвращает пользователя к начиная деятельность вашего приложения. Как и щебет птицы в официальном приложении Twitter и т.д.

78

В моей домашней деятельности я переопределить «onBackPressed», чтобы:

@Override 
public void onBackPressed() { 
    Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
} 

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

Я взял код из Going to home screen Programmatically

+0

Отлично, только то, что мне нужно. –

+0

Может кто-нибудь описать более подробно, как это работает? Если пользователь продолжает нажимать кнопку «Назад», а затем перезапускает приложение, не будет ли поток активности расти на неопределенный срок? – pete

+0

Отлично, он работал «как рекламируемый» :) – s0nica

23

лучшего пользовательский опыт:

/** 
* Back button listener. 
* Will close the application if the back button pressed twice. 
*/ 
@Override 
public void onBackPressed() 
{ 
    if(backButtonCount >= 1) 
    { 
     Intent intent = new Intent(Intent.ACTION_MAIN); 
     intent.addCategory(Intent.CATEGORY_HOME); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
    } 
    else 
    { 
     Toast.makeText(this, "Press the back button once again to close the application.", Toast.LENGTH_SHORT).show(); 
     backButtonCount++; 
    } 
} 
+1

Отличная работа. Несколько других вещей, которые я добавил бы, это установить переменную-член для вызова Toast.makeText (например, Toast myToast = Toast.makeText()), а затем использовать это на backButtonCount> = 1, вызывая .cancel() на этом тосте. Я увеличил продолжительность до Toast.LENGTH_LONG для своих целей, потому что для количества текста продолжительность казалась коротким. Мои пользователи - старые люди. Кроме того, как очевидно, backButtonCount является переменной-членом, равной 0, а также должен быть установлен в 0 в вашей первой инструкции if. –

+0

Я также добавляю "android.os.Process.killProcess (android.os.Process.myPid());" поэтому мое приложение будет убито и перезагрузится, если пользователь снова нажмет на него –

0

закончить свой current_activity с помощью метода finish() onBack method of your current_activity

, а затем добавить ниже строк в OnDestroy в current_activity для Удаления принудительного закрытия

@Override 
public void onDestroy() 
{ 
    android.os.Process.killProcess(android.os.Process.myPid()); 
    super.onDestroy(); 
} 
1

Приложение выйдет только в том случае, если в заднем стеке нет действий. SO добавить эту строку в файл манифеста андроида: noHistory = «истинный» для всех видов деятельности, которые вы не хотите, чтобы вернуться stacked.And то, чтобы закрыть приложение вызвать отделку() в OnBackPressed

<activity android:name=".activities.DemoActivity" 
      android:screenOrientation="portrait" 
      **android:noHistory="true"** 
      /> 
1

Прежде всего, Android не рекомендует вам делать это в кнопке «Назад», но, используя методы жизненного цикла. Кнопка «Назад» не должна уничтожать «Активность».

Действия добавляются в стек, доступный из обзора (квадратная кнопка, поскольку они ввели конструкцию материала в 5.0), когда кнопка возврата нажата на последнюю оставшуюся активность из стека пользовательского интерфейса. Если пользователь хочет закрыть приложение, он должен удалить его (закрыть) из меню «Обзор».

Ваше приложение несет ответственность за прекращение любых фоновых задач и заданий, которые вы не хотите запускать, в onpept() и onDestroy() жизненном цикле. Пожалуйста, прочитайте больше о жизненных циклах и их надлежащего осуществлении здесь: http://developer.android.com/training/basics/activity-lifecycle/stopping.html

Но чтобы ответить на ваш вопрос, вы можете сделать хаков осуществить точное поведение, которое вы хотите, но, как я уже сказал, это не рекомендуется:

@Override 
public void onBackPressed() { 

// make sure you have this outcommented 
// super.onBackPressed(); 
Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_HOME); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 
} 
1

Чтобы выйти из приложения для Android, просто используйте его. в вашей основной деятельности, или вы можете использовать Android файл манифеста, чтобы установить

android:noHistory="true" 
2

Использование onBackPressed методу

@Override 
public void onBackPressed() { 
    finish(); 
    super.onBackPressed(); 
} 

Это позволит решить проблему.

0

Я изменил ответ @Vlad_Spays так, что кнопка «назад» действует нормально, если она не является последним элементом в стеке, а затем запрашивает пользователя перед выходом из приложения.

@Override 
public void onBackPressed(){ 
    if (isTaskRoot()){ 
     if (backButtonCount >= 1){ 
      Intent intent = new Intent(Intent.ACTION_MAIN); 
      intent.addCategory(Intent.CATEGORY_HOME); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(intent); 
     }else{ 
      Toast.makeText(this, "Press the back button once again to close the application.", Toast.LENGTH_SHORT).show(); 
      backButtonCount++; 
     } 
    }else{ 
     super.onBackPressed(); 
    } 
} 
Смежные вопросы