Странное поведение однозадачной
Я понимаю, что 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".