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.