Скажем, у вас есть упражнения 1,2,3 ... и их поток:
Activity 1 -> Activity 2 -> Activity 3 -> ... and so on
Единственный выбор у вас действительно есть то, что в вашем Activity 1
, переопределить метод onBackPressed()
следующим образом:
@Override
public void onBackPressed(){
/* Call the Quit Dialog here. If user presses YES,
* call super.onBackPressed(), else if user presses NO,
* do nothing. */
}
Столбец Fragment
является локальным для приложения, тогда как стоп-лосс Activity
является локальным для task. В настоящее время существует несколько способов, чтобы проверить статус Activity
backstack текущей задачи по:
1. Произнесите Activity
поток
A1 -> A2 -> A3 -> A1 -> A2 -> A3 -> A1 ...
Можно гарантировать, что Activity 1
всегда начинается с пустой backstack. Каждый раз, когда вы начинаете Activity 1
с startActivity()
, назовем его с FLAG_ACTIVITY_CLEAR_TOP
флагом:
Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
2. Существует метод, называемый isTaskRoot(), который позволяет узнать, если Activity
в этой задаче первый Activity
, т.е. последний Activity
на задней стороне этой задачи. Это выглядит многообещающе.
3. Оказывается, есть еще один способ, чтобы определить, является ли Activity
последнего один на backstack:
ActivityManager mngr = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(10);
if(taskList.get(0).numActivities == 1 && taskList.get(0).topActivity.getClassName().equals(this.getClass().getName())) {
/* do whatever you want e.g. super.onBackPressed() etc. */
}
Для этого добавьте android.permission.GET_TASKS
разрешения на ваш манифест.
Так что ... :)
Я не уверен, что понял вопрос, но это заставляет меня думать об этом: [Деятельность # isTaskRoot()] (http://developer.android.com/ ссылка/android/app/Activity.html # isTaskRoot% 28% 29) –