СЛУЧАЙ I: - Когда флаг намерения вышел за пределы манифеста
В файле манифеста Я определил Activity_B как singleTop .
Вот соответствующие строки в файле манифеста: -
....
<activity android:name=".Activity_A" android:launchMode="standard">
...
<activity android:name=".Activity_B" android:launchMode="singleTop"/>
<activity android:name=".Activity_C" android:launchMode="standard"/>
<activity android:name=".Activity_D" android:launchMode="standard"/>
....
Полный файл манифеста приведен ниже: -
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".Activity_A" android:launchMode="standard">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Activity_B" android:launchMode="singleTop"/>
<activity android:name=".Activity_C" android:launchMode="standard"/>
<activity android:name=".Activity_D" android:launchMode="standard"/>
</application>
Теперь создан метод, который устанавливает Activity_B как singleTask во время выполнения метод показан ниже: -
protected void startActivity(Activity activity, Class targetActivityClass){
Intent intent=new Intent(activity,targetActivityClass);
if(targetActivityClass.equals(Activity_B.class)) {
getIntent().setFlags(Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_CLEAR_TOP);
}
startActivity(intent);
}
Теперь, когда я запустил это приложение , я заметил, что флаг Intent переопределяет режим запуска в файле манифеста.
( Как я пришел к такому выводу: - По сути, я заметил, что когда я перехожу к Activity_B после запуска нескольких действий, количество операций уменьшается, что является типичным поведением режима запуска Single Task )
СЛУЧАЙ II: - Когда манифест отменяет флаг намерения
Чтобы подтвердить это Я изменил режим запуска для Действия B на singleInstance в файле манифеста и сохранил режим запуска как singleTask в IntentFlag.
Теперь режим запуска файла манифеста был задан как singleInstance
<activity android:name=".Activity_B" android:launchMode="singleInstance"/>
Метод startActivity остался прежним , т.е.
protected void startActivity(Activity activity, Class targetActivityClass){
Intent intent=new Intent(activity,targetActivityClass);
if(targetActivityClass.equals(Activity_B.class)) {
getIntent().setFlags(Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_CLEAR_TOP);
}
startActivity(intent);
}
На этот раз, однако, файл манифеста не был переопределен.
( Как я пришел к такому выводу? Упражнение C не добавлялось в задачу, содержащую Упражнение B, которое является типичным поведением режима запуска singleInstance. )
Я пытался найти это в документации, но там ничего не упоминалось о таком поведении. Может ли кто-нибудь объяснить, почему результаты в этих двух случаях различаются, что происходит, независимо от того, что режим запуска, определенный в Manifest, переопределяет режим запуска, вызываемый через флаг намерения, или это наоборот, или существует какой-то внутренний порядок приоритетов этих режимов запуска
(Это мой первый вопрос по StackOverflow, я прошу прощения за любые ошибки, которые я мог совершить непреднамеренно)