web-dev-qa-db-fra.com

Afficher la pile d'activités de la tâche

Je viens de commencer à développer une application simple Android) pendant que j'apprenais encore la plateforme.

J'utilise Eclipse IDE avec le plugin ADT 0.9.6.

J'ai besoin de savoir s'il est possible d'afficher la pile Activity associée à une tâche?

Existe-t-il un moyen d'utiliser l'outil DDMS ou d'utiliser une autre technique?

Ce dont j'ai essentiellement besoin, c'est de pouvoir voir l'activité de pile d'une tâche pour m'assurer que l'application se comporte comme prévu.

Je sais qu'il est possible de contrôler le comportement de la tâche dans une certaine mesure en utilisant des indicateurs dans l'objet Intent et certains attributs de l'objet <activity> élément.

Cependant, il serait bien d’avoir une sorte d’outil - surtout en mode débogage - qui permettrait aux développeurs de voir la pile Activity directement.

131
Mic

Vous pouvez utiliser la commande suivante dans votre ligne de commande pour afficher les tâches et les backstacks du système:

adb Shell dumpsys activity activities | sed -En -e '/Stack #/p' -e '/Running activities/,/Run #0/p'

Ou vous pouvez essayer TaskLogger , un outil simple que j'ai créé et qui permet de surveiller toutes les activités et tâches de votre application et de les générer dans Logcat en temps réel.

52
Gerald.K

Je sais que c’est une vieille question, mais cette fonctionnalité est désormais intégrée dans Android Studio:

Android studio screenshot

Ensuite, dans le fichier texte résultant, recherchez ACTIVITY (en majuscules):

Android studio text file screenshot

28
tir38

Si vous souhaitez inspecter la pile de tâches d'un package spécifique, utilisez la commande suivante:

adb Shell dumpsys activity activities | grep PACKAGE_NAME | grep Hist
23
neevek

Je vérifie toujours cette partie des messages de dump longs ..

  Running activities (most recent first):
TaskRecord{4307f828 #56 A com.demo.proj U 0}
  Run #4: ActivityRecord{425a6838 com.demo.proj/com.demo.proj.Activity2}
  Run #3: ActivityRecord{427dc860 com.demo.proj/com.demo.proj.Activity1}
  Run #2: ActivityRecord{420cba18 com.demo.proj/com.demo.proj.MainActivity}
TaskRecord{430341d0 #2 A com.lge.launcher2 U 0}
  Run #1: ActivityRecord{41e0af68 com.lge.launcher2/.Launcher}
TaskRecord{44e26ce0 #18 A com.lge.appbox.client U 0}
  Run #0: ActivityRecord{41e9dbe8 com.lge.appbox.client/.AppBoxClient}

Remarque: la course n ° 4 est l'activité que vous voyez maintenant à l'écran.:)

12
cmcromance

Vous pouvez utiliser l'outil hierarchyviewer.bat. Il fait partie du SDK Android. Il ne fonctionne que sous l’émulateur. Toutefois, il est beaucoup plus confortable et plus clair.

Edit: Je viens de trouver le visualiseur de hiérarchie dans Eclipse! Et cela fonctionne aussi avec de vrais appareils. Ouvrez simplement la perspective Windows-> Ouvrir la perspective-> Vue hiérarchique. Dans la liste, vous pouvez voir tous les périphériques et émulateurs connectés, ainsi que la pile d'activités. De plus, dans l'arborescence, vous pouvez voir beaucoup plus d'informations sur la vue elle-même.

Modifier: le visualiseur de hiérarchie ne fonctionne qu'avec les périphériques de développement. Les appareils de production ne peuvent pas le faire pour des raisons de sécurité. Pour plus d'informations s'il vous plaît jeter un oeil à réponse suivante

10
Xazen

Pour la liste des tâches récentes

adb Shell dumpsys activity recents

Pour la liste des services en cours d'exécution

adb Shell dumpsys activity services

Pour la liste des fournisseurs de contenu actuels

adb Shell dumpsys activity providers

Pour la liste de l'état de diffusion

adb Shell dumpsys activity broadcasts

Pour la liste des intentions en attente

adb Shell dumpsys activity intents

Pour la liste des permissions

adb Shell dumpsys activity permissions
6
Prasad

Solution: 'activité adb Shell dumpsys' ne fonctionne pas avec TabActivity. Lorsque chaque élément de l'onglet sélectionné, l'activité correspondante sera lancée. Mais lorsque vous utilisez l'activité 'adb Shell dumpsys', elle renvoie toujours l'activité 'principale':

public class main extends TabActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.e("xyz", "start main...............");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Resources res = getResources(); // Resource object to get Drawables
        TabHost tabHost = getTabHost();  // The activity TabHost
        TabHost.TabSpec spec;  // Resusable TabSpec for each tab
        Intent intent;  // Reusable Intent for each tab

        // Create an Intent to launch an Activity for the tab (to be reused)
        intent = new Intent().setClass(this, widgets.class);
        spec = tabHost.newTabSpec("Widgets").setIndicator("Widgets", res.getDrawable(R.drawable.tab1)).setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, layouts.class);
        spec = tabHost.newTabSpec("Layouts").setIndicator("Layouts",res.getDrawable(R.drawable.tab2)).setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, composite1.class);
        spec = tabHost.newTabSpec("Composite").setIndicator("Composite",res.getDrawable(R.drawable.tab3)).setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, imageMedia.class);
        spec = tabHost.newTabSpec("Image_Media").setIndicator("Image&Media",res.getDrawable(R.drawable.tab4)).setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, timeDate.class);
        spec = tabHost.newTabSpec("Time_Date").setIndicator("Time&Date",res.getDrawable(R.drawable.tab5)).setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, transitions.class);
        spec = tabHost.newTabSpec("Transitions").setIndicator("Transitions",res.getDrawable(R.drawable.tab6)).setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, advanced.class);
        spec = tabHost.newTabSpec("Advanced").setIndicator("Advanced",res.getDrawable(R.drawable.tab7)).setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, others.class);
        spec = tabHost.newTabSpec("Others").setIndicator("Others",res.getDrawable(R.drawable.tab8)).setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, Dynamic.class);
        spec = tabHost.newTabSpec("Dynamic").setIndicator("Dynamic",res.getDrawable(R.drawable.tab2)).setContent(intent);
        tabHost.addTab(spec);

        tabHost.setCurrentTab(0);

    }
}
1
Pyraman