Виджет Открывает мертвую активность приложения, которая приводит к неправильной работе кнопки возврата - PullRequest
0 голосов
/ 07 октября 2018

Итак, у меня есть действие, которое может иметь два разных родительских действия в зависимости от того, откуда оно было запущено.Кнопки «Назад» (панель приложения и кнопка «Назад») правильно работают в приложении, в зависимости от того, какое действие оно запустило.

Виджет моего приложения открывает ту же активность с намерением ожидания.Это так правильно.Фактически, эта логика кнопки «Назад» по-прежнему работает правильно при нажатии на виджет, если приложение не было полностью закрыто.

Пример: Активность A запускает активность C, кнопка возврата перемещается с C до A.Действие A запускает действие B, которое затем запускает действие C, поэтому обратная навигация - C -> B -> A.Это работает правильно в приложении и из резюме виджета C через ожидающее намерение.

Проблема возникает, когда пользователь закрывает приложение (т.е. очищает его от действий, нажав кнопку обзора и удалив ее).Как только это происходит, виджет приложения по-прежнему функционирует нормально, открывая правильную активность, но кнопка «Назад» возвращает пользователя на домашний экран Android вместо правильной родительской активности.(IE NO C -> A ИЛИ C -> B -> A, просто C -> home screen.)

В настоящее время родительская активность не объявлена ​​длямое запущенное действие в манифесте.

ВОПРОС: Как сохранить правильную обратную навигацию к какому действию, к которому нужно вернуться, когда система удаляет приложение из памяти?Есть ли способ объявить два родительских действия и выбрать одно на основе набора намерений?Или другой способ объявить, к какому виду деятельности перейти обратно с данными, переданными из намерения?(Пользовательский интерфейс действия немного отличается в зависимости от того, какая операция его запустила, и эта информация сохраняется через ожидающее намерение виджета приложения.)

К вашему сведению: На всякий случай это действие Cиспользует этот код для обратной функциональности:

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) // Press Back Icon
    {
        onBackPressed();
    }

    return super.onOptionsItemSelected(item);
  }
  @Override
    public void onBackPressed() {
    super.onBackPressed();
  }

Кроме того, я знаю, что могу начать новое действие с помощью метода onBackPressed(), но если бы я сделал это, мне нужно было бы как-то узнать, открыл ли виджет действиеновый или возобновленный из системного стека активности И не испортить обратную навигацию по активности B или C из уже нормальной и функционирующей навигации по активности.

...