Подтвердить что ты не робот

Почему excludeFromRecents удаляет все действия?

В моем приложении есть две точки входа (MainActivity и FromNotificationActivity).

Я хочу, чтобы MainActivity появлялась в последних задачах, но не FromNotificationActivity)

Если ничего не объявлено в манифесте, если я это сделаю...

  • MainActivity
  • Назад
  • FromNotificationActivity
  • Назад

... Я обнаружил, что FromNotificationActivity указан в последних задачах

Если я добавлю android:excludeFromRecents="true" в FromNotificationActivity в манифесте и повторю ту же последовательность, я нахожу ничего в последних списках.

Какие заклинания я должен вызвать так, что после описанной выше последовательности шагов я получаю MainActivity в недавнем списке.

4b9b3361

Ответ 1

По умолчанию все действия приложения имеют одинаковую близость. Концепции с такой же близостью относятся к одной и той же задаче. Следовательно, в этом случае оба MainActivity и FromNotificationActivity относятся к одной и той же задаче. android:excludeFromRecents гарантирует, что задача не указана в последних приложениях. В этом причина, когда android:excludeFromRecents установлен на true для FromNotificationActivity, MainActivity исчезает из истории.

Решение: Используйте android:taskAffinity, чтобы указать разные задачи для обоих действий. Используйте android:excludeFromRecents для FromNotificationActivity, если эта задача вообще не должна отображаться в истории.

<activity   
    android:name="com.example.MainActivity"
    android:label="@string/app_name"
    android:taskAffinity=".MainActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity> 

<activity android:name="com.example.FromNotificationActivity"
    android:label="@string/notification_name"
    android:taskAffinity=".NotificationActivity"
    android:excludeFromRecents="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity> 

Ответ 2

От документы

Android: excludeFromRecents
Независимо от того, следует ли исключить задачу, инициированную этим действием, из списка недавно использованных приложений (" последние приложения "). То есть, когда это действие является корневой активностью новой задачи, этот атрибут определяет, не должна ли задача отображаться в списке последних приложений. Установите" true ", если задача должна быть исключена из списка; установите" false ", если он должен быть включен. Значение по умолчанию -" false".

Значит, это не активность, а задача, которой управляет этот флаг. Вы не размещали элементы активности в своем манифесте, но я предполагаю, что эти два действия выполняются в одной и той же задаче. Изменение режима launchMode на singleTask на обоих из них должно выполнять задание.

Ответ 3

Вы должны использовать флаг намерения от вашего First_Activity до Second_Activity. Не нужно декларировать в манифесте что-либо. Используя этот код, активность, которая пойдет на намерение, будет вашей недавней деятельностью.

Intent intent = new Intent(CONTEXT_OF_CURRENT_ACTIVITY, YOUR_ACTIVITY.class);
intent.putExtra("NAME", "VALUE");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();

Надеюсь, это будет полезно.