Android quatre principaux modes de démarrage des activités des composants

1.mode standard standard

Chaque fois qu'une activité est démarrée (ci-après représentée par Ac), une instance sera créée, que l'instance existe ou non.
Implémentation multi-instance typique, une pile de tâches peut contenir plusieurs instances, et chaque instance peut également appartenir à une pile de tâches différente.
Qui démarre Ac, le nouvel Ac s'exécute dans la pile de l'Ac qui l'a démarré

2. réutilisation du dessus de la pile singleTop

Si le nouveau Ac est déjà en haut de la pile de tâches, il ne sera pas créé après le redémarrage et le rappel de la méthode onNewIntent() sera déclenché en même temps.Les paramètres de cette méthode peuvent extraire les informations actuellement demandées.

S'il n'est pas en haut de la pile, créez-en un nouveau et appelez onCreate(), onStart()

Par exemple : ABCD, quatre Ac dans la pile, A est en bas de la pile et D est en haut de la pile. Redémarrez D et le mode de démarrage est singleTop, la pile sera toujours ABCD.

Si le mode de démarrage est standard, D sera reconstruit et la pile sera ABCDD.

3.singleTask réutilisation dans la pile

Tant que Ac existe dans la pile, elle ne sera pas recréée au redémarrage. Comme singleTop, la méthode onNewIntent() sera rappelée
. Si la pile de tâches requise est S1 et que la pile de tâches S1 est ADBC, la pile principe de réutilisation, D ne reconstruit pas, coupe en haut de la pile et appelle onNewIntent(), singleTask a un effet clearTop, tous les Ac sur D sont retirés de la pile, et enfin AD

4. mode instance unique singleInstance

Le singleTask amélioré possède toutes les fonctionnalités du mode singleTask. Une autre amélioration est que l'Ac dans ce mode ne peut être localisé que dans une seule pile de tâches. Tout autre Ac démarré par cet Ac sera placé dans d'autres piles de tâches.

Spécifiez le mode de démarrage :

1. Spécifiez l'activité via AndroidManifest

Par exemple:

<activité

android:name = « com.xxx.MyActivity »

android:launchMode="singleTask"/>

2. Spécifiez l'activité en définissant le drapeau dans l'intention

Par exemple:

Intention intention = new Intent();

intent.setClass(MainActivity.this,MyActivity.class);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent)
Remarque : la méthode 2 a une priorité plus élevée

Les deux autres méthodes diffèrent par leur portée limitée, comme

La première méthode ne peut pas définir directement l'indicateur FLAG_ACTIVITY_CLEAR_TOP pour l'activité, et la deuxième méthode ne peut pas spécifier le mode singleInstance pour l'activité.

Indicateurs d'activité couramment utilisés :

1.FLAG_ACTIVITY_NEW_TASK :

Spécifiez le mode de démarrage singleTask, son effet est le même que celui spécifié en XML

accomplir:

Recherchez s'il existe une pile de tâches avec taskAffinity liée à la tâche Ac de démarrage. La
corrélation des tâches Ac de la même application est la même et la valeur par défaut est le nom du package.
Oui, déplacez la pile entière au premier plan et l'ancienne. dans la pile reste inchangé. Démarrez Ac et poussez-le dans la pile
. , puis créez une nouvelle pile pour le stockage
. Remarque : Si Ac est démarré avec ApplicationContext, FLAG_ACTIVITY_NEW_TASK doit être ajouté, sinon une exception sera signalée.

2.FLAG_ACTIVITY_SINGLE_TOP :

Spécifiez le mode de démarrage singleTop, qui est identique à la spécification XML

3.FLAG_ACTIVITY_CLEAR_TOP :

Lorsqu'un Ac avec cette marque est démarré, l'Ac au-dessus dans la même pile sera retiré de la pile.

Ce mode doit généralement être utilisé conjointement avec FLAG_ACTIVITY_NEW_TASK. A ce moment, si l'Ac activé existe, son onNewIntent() sera appelé.

Si l'Ac démarré est démarré en mode standard, lui et l'Ac ci-dessus seront retirés de la pile, et le système créera une nouvelle instance Ac et la placera sur la pile.

4.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS :

Ac avec cette marque n'apparaîtra pas dans la liste Ac historique, qui peut être utilisée lorsque vous ne souhaitez pas que l'utilisateur revienne à l'Ac actuel via la liste historique.

L'attribut Android d'Ac spécifié en XML : includeFromRecents="true"

5.FLAG_ACTIVITY_REORDER_TO_FRONT

ABCD dans la pile, démarrez B, devenez ACDB

pile de tâches

Le paramètre TaskAffinity (affinité de tâche) identifie le nom de la pile de tâches requise par un Ac.

Par défaut, les noms de toutes les piles de tâches requises par Ac sont les noms des packages d'application.

L'attribut TaskAffinity est principalement utilisé en conjonction avec le mode de démarrage singleTask ou l'attribut allowTaskReparenting et n'a aucune signification dans les autres cas.

De plus : la pile de tâches est divisée en une pile de tâches de premier plan et une pile de tâches d'arrière-plan. Ac dans la pile de tâches d'arrière-plan est en pause. L'utilisateur peut remettre la pile de tâches en arrière-plan au premier plan

Scènes :

TaskAffinity est utilisé conjointement avec le mode de démarrage singleTask. Il s'agit du nom de la pile de tâches actuelle de l'Ac avec ce mode. L'Ac à démarrer s'exécutera dans la pile de tâches portant le même nom que TaskAffinity. Lorsque TaskAffinity et AllowTaskReparenting les attributs sont combinés, c'est spécial. Par exemple, il y
a
deux applications de A et B, A démarre un Ac C de B, puis appuie sur la touche HOME pour revenir au bureau, puis clique sur l'application B. À ce moment, il n'est pas l'application principale de B qui est démarrée, mais Ac C. Parce qu'à ce moment, C est transféré de la pile de tâches de A à la pile de tâches de B.

Principe : Au démarrage de B, B crée sa propre pile de tâches. À ce moment-là, le système constate que C a été créé et transfère donc C depuis la pile de tâches de A.

Je suppose que tu aimes

Origine blog.csdn.net/qq_32670947/article/details/132490504
conseillé
Classement