Différence entre Intention.FLAG_ACTIVITY_CLEAR_TASK et Intent.FLAG_ACTIVITY_TASK_ON_HOME

À partir de la documentation Android:

FLAG_ACTIVITY_CLEAR_TASK

  • Studio Android montre soudainement des noms complets de dossiers, comment changer
  • Comment puis-je empêcher Android Activity de passer brièvement en mode portrait lorsque j'ai spécifié un paysage?
  • AndroidStudio Gradle: comment configurer buildTypes, et vérifier quel type de construction lors de la construction?
  • Android - Ajuster l'écran lorsque le clavier apparaît?
  • Difficulté à comprendre layout_alignWithParentIfMissing
  • Comment faire un HTTPS POST depuis Android?
  • Si elle est définie dans une intention passée à Context.startActivity (), ce drapeau provoquera toute tâche existante qui serait associée à l'activité à effacer avant l'ouverture de l'activité. Autrement dit, l'activité devient la nouvelle racine d'une tâche autrement vide et toutes les anciennes activités sont terminées. Cela ne peut être utilisé qu'en conjonction avec FLAG_ACTIVITY_NEW_TASK.

    et

    FLAG_ACTIVITY_TASK_ON_HOME

    Si elle est définie dans une intention passée à Context.startActivity (), ce drapeau entraînera une nouvelle tâche de lancement sur la tâche d'activité locale actuelle (s'il y en a une). C'est-à-dire, en appuyant de nouveau sur la tâche, il sera toujours rendu à l'utilisateur, même si ce n'était pas la dernière activité qu'ils ont vu. Cela ne peut être utilisé qu'en conjonction avec FLAG_ACTIVITY_NEW_TASK.

    Considérez ces deux extraits:

    Intent intent = new Intent(this, Activity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); 

    et

     Intent intent = new Intent(this, Activity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME); startActivity(intent); 

    Comme je le comprends, dans l'extrait de code, nous créons une nouvelle tâche qui a uniquement Activité, et lorsque vous appuyez de nouveau, vous accédez à l'écran d'accueil. En supposant que je me trompe probablement, quelles sont les différences entre les deux? Aussi, si j'avais un autre extrait avec Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME | Intent.FLAG_ACTIVITY_CLEAR_TASK Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME | Intent.FLAG_ACTIVITY_CLEAR_TASK Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME | Intent.FLAG_ACTIVITY_CLEAR_TASK comment cela se comporterait-il?

  • Existe-t-il un moyen de surcharger JSONArray pour se comporter comme une liste régulière en boucle?
  • Sip Error lors de l'enregistrement
  • Quelle est la résolution standard de la tablette Android?
  • Développement Android: Améliorez le défilement EditText?
  • Android Split Action Bar avec des éléments d'action en haut et en bas?
  • Image de bouton de lecture / pause dans la notification, Android
  • One Solution collect form web for “Différence entre Intention.FLAG_ACTIVITY_CLEAR_TASK et Intent.FLAG_ACTIVITY_TASK_ON_HOME”

    Il y a une différence entre les 2 extraits. Voici quelques informations importantes:

    • Une tâche contient une pile d'activités. Une tâche peut être au premier plan ou en arrière-plan.

    • Les tâches sont également "empilées". Si vous êtes dans la tâche A et que vous lancez une nouvelle tâche B , la tâche B est empilée au dessus de la tâche A Si l'utilisateur appuie suffisamment sur la touche BACK pour la tâche B , il finira par retrouver la tâche `A. C'est un comportement standard d'Android.

    Votre extrait …

     Intent intent = new Intent(this, Activity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); 

    … ferai 1 des choses suivantes, selon …

    1. Si l' Activity a la même affinité de tâche que la tâche en cours (c'est-à-dire la tâche à partir de laquelle ce code s'exécute), elle effacera la tâche en cours (termine toutes les activités de la tâche) et lance une nouvelle instance d' Activity dans la tâche en cours. Si l'utilisateur appuie sur la touche RETOUR, cela finira l' Activity et terminera la tâche en cours (car il n'y a qu'une seule activité dans la tâche) et renvoie l'utilisateur à l'écran HOME ou à la tâche qui a commencé cette tâche (la tâche qui est Sous cette tâche dans la pile de tâches).
    2. Si l' Activity a une affinité de tâche différente de la tâche en cours, et il existe déjà une tâche existante avec cette affinité de tâche (c'est-à-dire: une tâche existante à laquelle l' Activity appartient), la tâche existante est mise au premier plan, effacée (toutes les activités Dans la tâche terminée), une nouvelle instance d' Activity est créée à la racine de la tâche et cette tâche est placée au dessus de la tâche en cours (de sorte que lorsque l' Activity finit, l'utilisateur est renvoyé dans la tâche actuelle).
    3. Si l' Activity a une affinité de tâche différente de celle de la tâche en cours, et il n'y a pas de tâche existante avec cette affinité de tâche, une nouvelle tâche est créée et une nouvelle instance d' Activity est créée à la racine de la tâche et cette tâche est mise en évidence La tâche en cours (de sorte que lorsque l' Activity termine, l'utilisateur est renversé dans la tâche en cours).

    Cet extrait de code …

     Intent intent = new Intent(this, Activity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME); startActivity(intent); 

    … ferai 1 des choses suivantes en fonction …

    1. Si l' Activity a la même affinité de tâche que la tâche en cours (c'est-à-dire: la tâche à partir de laquelle ce code s'exécute) et Activity est l'activité racine de la tâche en cours, cela ne fera rien. Il ne démarrera pas une nouvelle tâche, il n'éliminera aucune activité, il ne créera pas une nouvelle instance d' Activity et ne changera pas le comportement de ce qui se passe lorsque la tâche actuelle est terminée (c.-à-d. Si la tâche actuelle a été démarrée Par une autre tâche, lorsque toutes les activités de la tâche en cours sont terminées, elle renverra l'utilisateur à la tâche précédente dans la pile de tâches).
    2. Si l' Activity a la même affinité de tâche que la tâche en cours (c'est-à-dire: la tâche à partir de laquelle ce code s'exécute) et Activity n'est pas l'activité racine de la tâche en cours, cela créera simplement une nouvelle instance d' Activity et la mettra au dessus L'activité actuelle dans la tâche actuelle. Il ne démarrera pas une nouvelle tâche, il ne supprimera aucune activité et il ne changera pas le comportement de ce qui se produit lorsque la tâche actuelle est terminée (c.-à-d. Si la tâche actuelle a été démarrée par une autre tâche, lorsque toutes les activités dans le courant La tâche est terminée, elle renverra l'utilisateur à la tâche précédente dans la pile de tâches).
    3. Si l' Activity a une affinité de tâche différente de la tâche en cours, et il existe déjà une tâche existante avec cette affinité de tâche (c'est-à-dire: une tâche existante à laquelle l' Activity appartient) et Activity est l'activité racine de cette tâche existante, puis cette tâche existante Est porté au premier plan et cette tâche est découplée de la pile de tâches (c.-à-d. Lorsque toutes les activités de cette tâche sont terminées, elles renverront l'utilisateur à l'écran HOME et non à la tâche qui a commencé cette tâche).
    4. Si l' Activity a une affinité de tâche différente de la tâche en cours, et il existe déjà une tâche existante avec cette affinité de tâche (c.-à-d.: Une tâche existante à laquelle l' Activity appartient) et l' Activity n'est pas l'activité racine de cette tâche existante, puis celle existante La tâche est mise au premier plan et cette tâche est découplée de la pile de tâches (c.-à-d. Lorsque toutes les activités de cette tâche sont terminées, elle renverra l'utilisateur à l'écran HOME et non à la tâche qui a commencé cette tâche) et une nouvelle instance De l' Activity est créée et mise au dessus de toute activité existante dans cette tâche.
    5. Si l' Activity a une affinité de tâche différente de la tâche en cours, et il n'y a pas de tâche existante avec cette affinité de tâche, une nouvelle tâche est créée et une nouvelle instance d' Activity est créée à la racine de la tâche et la nouvelle tâche est découplée de la tâche. Pile de tâches (de sorte que lorsque l' Activity termine, l'utilisateur est retourné à l'écran HOME et non à la tâche qui l'a démarré).

    Et enfin cet extrait …

     Intent intent = new Intent(this, Activity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME); startActivity(intent); 

    … ferai 1 des choses suivantes, selon …

    1. Si l' Activity a la même affinité de tâche que la tâche en cours (c'est-à-dire la tâche à partir de laquelle ce code s'exécute), elle effacera la tâche en cours (termine toutes les activités de la tâche) et lance une nouvelle instance d' Activity dans la tâche en cours. Si l'utilisateur appuie sur la touche RETOUR, cela finira l' Activity et terminera la tâche en cours (car il n'y a qu'une seule activité dans la tâche) et retourne l'utilisateur dans l'écran HOME.
    2. Si l' Activity a une affinité de tâche différente de la tâche en cours, et il existe déjà une tâche existante avec cette affinité de tâche (c'est-à-dire: une tâche existante à laquelle l' Activity appartient), la tâche existante est mise au premier plan, effacée (toutes les activités Dans la tâche terminée), une nouvelle instance d' Activity est créée à la racine de la tâche et cette tâche est découplée de la pile de tâches (de sorte que lorsque l' Activity termine, l'utilisateur est retourné à l'écran HOME).
    3. Si l' Activity a une affinité de tâche différente de celle de la tâche en cours, et il n'y a pas de tâche existante avec cette affinité de tâche, une nouvelle tâche est créée et une nouvelle instance d' Activity est créée à la racine de la tâche et cette tâche est découplée de la tâche Pile (de sorte que lorsque l' Activity finit, l'utilisateur est retourné à l'écran HOME).

    Je me rends compte que cette réponse est longue et compliquée, mais il y a tellement de cas différents. Je n'ai même pas couvert tous les cas possibles (par exemple, si Activity a un mode de lancement spécial) …

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.