Как проверить экземпляр в заднем стеке действий и удалить одно из действий - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть 3 activities, сложенные друг над другом

A -> B -> C -> D
  • Теперь, когда я нахожусь в D, Как узнать, что B доступно в backstack
  • Сейчаскогда B присутствует в заднем стеке, удалите только B из стека A, B, C, D
  • Затем снова запустите B ... получив результат ACDB

Возможно ли этов андроиде, как?

PS: мне нужно разместить код? .. дайте мне знать ... потому что есть только действия и никакой другой логики

Ответы [ 3 ]

1 голос
/ 09 апреля 2019

Вы можете достичь этого с помощью ActivityManager.Ниже тот же код,

ActivityManager m = (ActivityManager) ctx.getSystemService( ctx.ACTIVITY_SERVICE );
List<RunningTaskInfo> runningTaskInfoList =  m.getRunningTasks(10);
Iterator<RunningTaskInfo> itr = runningTaskInfoList.iterator();
while(itr.hasNext()){
    RunningTaskInfo runningTaskInfo = (RunningTaskInfo)itr.next();
    int id = runningTaskInfo.id;
    CharSequence desc= runningTaskInfo.description;
    int numOfActivities = runningTaskInfo.numActivities;
    String topActivity = runningTaskInfo.topActivity.getShortClassName();
}

Это даст вам все действия.Для более подробной информации см. Документы

https://developer.android.com/reference/android/app/ActivityManager

0 голосов
/ 09 апреля 2019

Проблема: Изменение backstack ABCD на ACDB .

Решение: Из Android Developer Документация.

FLAG_ACTIVITY_REORDER_TO_FRONT

public static final int FLAG_ACTIVITY_REORDER_TO_FRONT

Если установлен в Intent, переданном в Context # startActivity, этот флаг будет заставить запущенную деятельность быть доведенной до ее задачи стек истории, если он уже запущен.

Например, рассмотрим задачу, состоящую из четырех действий: A, B, C, D. Если D вызывает startActivity () с намерением, которое разрешается в компонент деятельности B, то B будет выведен на передний план стек истории, с таким результирующим порядком: A, C, D, B. Этот флаг будет игнорируется, если также указано FLAG_ACTIVITY_CLEAR_TOP.

0 голосов
/ 09 апреля 2019

В вашей основной деятельности Создайте ArrayList типа Activity.

public static ArrayList<Activity> activityArrayList = new ArrayList<>();

при изменении вида деятельности просто добавьте строку в следующий вид деятельности

BaseActivity.activityArrayList.add(this);

эти действия добавляются в ваш arrayList, теперь вы можете легко добавлять или удалять любые действия по вашему выбору из списка массивов, например, у меня есть несколько функций в Base Activity, удаляющих все действия или удаляющих все, кроме основной

public static void finishAllExceptMain() {
  try {
    //Constants.logMessage(Constants.TAG, "outer Start Size: " + activityArrayList.size());
    int count = activityArrayList.size();
    while (count > 1) {
      count--;
      activityArrayList.get(count).finish();
      activityArrayList.remove(count);
    }

  } catch (Exception e) {

  }
}

public static void finishLastActivity() {
  int lastActivity = activityArrayList.size() - 1;
  activityArrayList.get(lastActivity).finish();
  activityArrayList.remove(activityArrayList.get(lastActivity));
}
...