Странное поведение однозадачной

Я понимаю, что launchMode:"singleTask" означает, что если действие было ранее создано и запрашивается в будущем для отображения, Android просто покажет старый вместо создания нового экземпляра. Проблема, с которой я сталкиваюсь, может быть проиллюстрирована на примере:

Скажем, у нас есть два мероприятия
Активиты
B (Активность с launchMode="singleTask") включена (это все, что есть в декларации манифеста)

Теперь, если A создает Intent, который соответствует B (A->B), то A завершается и удаляется из стека активности. Как я могу предотвратить это? Что я хочу, так это то, что когда A вызывает B (создает намерение), возвращается предыдущий экземпляр B, и A остается без изменений и не уничтожается. Спасибо за помощь. Любая помощь приветствуется

РЕДАКТИРОВАТЬ

<activity
        android:name="com.example.Activities.A"
        android:launchMode="singleTask"
        android:clearTaskOnLaunch="false"
        android:finishOnTaskLaunch="false"
        android:label="@string/app_name"

        >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.example.Activities.B"
        android:launchMode="singleTask"
        android:clearTaskOnLaunch="false"
        android:finishOnTaskLaunch="false"
        android:label="@string/app_name"

        >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

1 ответ

Если вы просто хотите иметь 2 действия, которые переключаются назад и вперед в одной и той же задаче, то вы должны удалить все специальные режимы запуска и просто запустить одно действие из другого, например так:

Intent intent = new Intent(this, ActivityX.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

Если вы начнете B от A используя этот метод, а также начать A от B используя этот метод, то у вас будет один экземпляр каждого Activity в вашей задаче, и они просто будут менять позиции в стеке. Это не создаст никаких новых экземпляров.

Также удалите <intent-filter> декларации, они вам не нужны. Вам нужен только один для рута Activity который должен содержать "ACTION=MAIN" и "CATEGORY=LAUNCHER".

Другие вопросы по тегам