Переопределяет ли режим запуска, определенный в Manifest, режим запуска, вызываемый через флаг намерения, или это наоборот? - PullRequest
0 голосов
/ 28 июня 2018

СЛУЧАЙ 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, я прошу прощения за любые ошибки, которые я мог совершить непреднамеренно)

1 Ответ

0 голосов
/ 28 июня 2018

Может кто-нибудь объяснить, что именно происходит, если режим запуска определенные в манифесте переопределяют режим запуска, вызываемый через флаг намерения или наоборот?

Флаги, определенные с помощью Intent во время запуска Activity, отменяют режим по умолчанию из Manifest.

На основании документации :

При запуске занятия вы можете изменить ассоциацию по умолчанию деятельность к своей задаче, включив флаги в намерение, что вы доставить в startActivity ().

Ниже приведены флаги, которые можно использовать для изменения поведения по умолчанию:

...