149 votes

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

J'ai juste commencé à développer une simple application Android alors que je suis encore à apprendre la plate-forme.

Je suis à l'aide de l'IDE Eclipse avec le plugin ADT 0.9.6.

J'ai besoin de savoir si il est possible d'afficher l' Activity pile qui est associé à une Tâche?

Il y a tout un chemin à travers la DDMS outil ou par toute autre technique?

Essentiellement, ce que j'ai besoin est d'être en mesure de voir la pile de l'activité d'une tâche de veiller à ce 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, par le biais de l'utilisation des indicateurs dans l' Intent objet et par le biais de certains attributs de l' <activity> élément.

Toutefois, il serait bien d'avoir une sorte d'outil - en particulier dans le mode de débogage ou de ce qui permettrait aux développeurs de voir l' Activity de la pile de droite vers l'avant.

170voto

hackbod Points 55292

À partir de la ligne de commande, vous pouvez utiliser: adb shell dumpsys activity

Cela demande à l'activité de gestionnaire d'imprimer une copie de son état actuel. La première partie de cela est l'activité complet de l'histoire, organisé par la tâche. Il y a aussi beaucoup de choses imprimé après cela, vous devrez peut-être faire défiler un peu pour trouver ce que vous voulez.

Voici un exemple de sa sortie (le contenu exact varie d'une plate-forme de versions), montrant le haut de la tâche des contacts avec les deux activités, et derrière que le lanceur avec une activité:

Les activités Actuelles de l'Activité de Gestionnaire de l'Etat:
 * TaskRecord{44d07218 #4 Un android.de la tâche.contacts}
 clearOnBackground=true numActivities=2 rootWasReset=true
affinité=android.de la tâche.contacts
 intention={act=android.l'intention.d'action.PRINCIPALES cat=[android.l'intention.de la catégorie.LAUNCHER] flg=0x10600000 cmp=com.android.contacts/.DialtactsActivity bnds=[125,640][235,758]}
origActivity=com.android.contacts/.DialtactsContactsEntryActivity
realActivity=com.android.contacts/.DialtactsActivity
 lastActiveTime=288203177 (inactif pour 14s)
 * Hist #8: HistoryRecord{44b87a30 com.android.contacts/.ViewContactActivity}
 nom_module=com.android.contacts processName=android.processus.acore
 launchedFromUid=10004 app=ProcessRecord{44c4f348 1168:android.processus.acore/10004}
 L'intention { act=android.l'intention.d'action.VUE dat=content://com.android.contacts/contacts/recherche/144i148.144i461a29500afc8eeb/1927 cmp=com.android.contacts/.ViewContactActivity }
 frontOfTask=false task=TaskRecord{44d07218 #4 Un android.de la tâche.contacts}
taskAffinity=android.de la tâche.contacts
realActivity=com.android.contacts/.ViewContactActivity
 base=/system/app/Contacts.apk/system/app/Contacts.apk data=/data/data/com.android.contacts
 labelRes=0x7f090012 icône=0x7f02006b thème=0x7f0e0004
 stateNotNeeded=false componentSpecified=false isHomeActivity=false
 configuration={ scale=1.0 imsi=310/4 loc=en_US touch=3 clés=2/1/2 nav=2/2 orien=1 layout=34}
 resultTo=HistoryRecord{44d174d0 com.android.contacts/.DialtactsContactsEntryActivity} resultWho=favoris resultCode=2
 launchFailed=false haveState=faux glaçon=null
 etat=REPRISE arrêté=false delayedResume=false finition=false
 keysPaused=false inHistory=true persistante=false launchMode=0
 fullscreen=true visible=true frozenBeforeDestroy=false thumbnailNeeded=false idle=true
 waitingVisible=false nowVisible=true
 * Hist #7: HistoryRecord{44d174d0 com.android.contacts/.DialtactsContactsEntryActivity}
 nom_module=com.android.contacts processName=android.processus.acore
 launchedFromUid=10004 app=ProcessRecord{44c4f348 1168:android.processus.acore/10004}
 L'intention { act=android.l'intention.d'action.PRINCIPALES cat=[android.l'intention.de la catégorie.LAUNCHER] flg=0x10200000 cmp=com.android.contacts/.DialtactsContactsEntryActivity bnds=[125,640][235,758] }
 frontOfTask=true task=TaskRecord{44d07218 #4 Un android.de la tâche.contacts}
taskAffinity=android.de la tâche.contacts
realActivity=com.android.contacts/.DialtactsActivity
 base=/system/app/Contacts.apk/system/app/Contacts.apk data=/data/data/com.android.contacts
 labelRes=0x7f090007 icône=0x7f02006b thème=0x7f0e0000
 stateNotNeeded=false componentSpecified=true isHomeActivity=false
 configuration={ scale=1.0 imsi=310/4 loc=en_US touch=3 clés=2/1/2 nav=2/2 orien=1 layout=34}
 launchFailed=false haveState=vrai glaçon=Bundle[mParcelledData.données. datasize=4196]
 etat=CESSÉ de cessé=true delayedResume=false finition=false
 keysPaused=false inHistory=true persistante=false launchMode=2
 fullscreen=true visible=false frozenBeforeDestroy=false thumbnailNeeded=false idle=true
 * TaskRecord{44c4ee90 #2 Un com.android.lanceur}
 clearOnBackground=true numActivities=1 rootWasReset=true
affinité=com.android.lanceur
 intention={act=android.l'intention.d'action.PRINCIPALES cat=[android.l'intention.de la catégorie.La MAISON] flg=0x10600000 cmp=com.android.lanceur/.Lanceur}
realActivity=com.android.lanceur/.Lanceur
 lastActiveTime=214734838 (inactif pour 73483s)
 * Hist #6: HistoryRecord{44c4d988 com.android.lanceur/.Lanceur}
 nom_module=com.android.lanceur processName=android.processus.acore
 launchedFromUid=0 app=ProcessRecord{44c4f348 1168:android.processus.acore/10004}
 L'intention { act=android.l'intention.d'action.PRINCIPALES cat=[android.l'intention.de la catégorie.La MAISON] flg=0x10000000 cmp=com.android.lanceur/.Lanceur }
 frontOfTask=true task=TaskRecord{44c4ee90 #2 Un com.android.lanceur}
taskAffinity=com.android.lanceur
realActivity=com.android.lanceur/.Lanceur
 base=/system/app/Lanceur.apk/system/app/Lanceur.apk data=/data/data/com.android.lanceur
 labelRes=0x7f0a0000 icône=0x7f020015 thème=0x103005f
 stateNotNeeded=true componentSpecified=false isHomeActivity=true
 configuration={ scale=1.0 imsi=310/4 loc=en_US touch=3 clés=2/1/2 nav=2/2 orien=1 layout=34}
 launchFailed=false haveState=vrai glaçon=Bundle[mParcelledData.données. datasize=5964]
 etat=CESSÉ de cessé=true delayedResume=false finition=false
 keysPaused=false inHistory=true persistante=false launchMode=2
 fullscreen=true visible=false frozenBeforeDestroy=false thumbnailNeeded=false idle=true

12voto

cmcromance Points 668

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: L’exécution n ° 4 est l’activité que vous voyez maintenant à l’écran. :)

10voto

Xazen Points 515

Vous pouvez utiliser l'outil hierarchyviewer.chauve-souris. C'est une partie du kit SDK d'android. Il ne fonctionne qu'avec l'émulateur. Mais il est tellement plus confortable et plus claire.

Edit: je viens de trouver la Hiérarchie Spectateur au sein d'Eclipse! Et il fonctionne avec les périphériques réels. Il suffit d'ouvrir la perspective de Windows->Open Perspective-> Affichage de la Hiérarchie Dans la liste, vous pouvez voir tous les appareils connectés et les émulateurs et de l'activité de la pile. Et en plus dans l'arborescence de la vue, vous pouvez voir beaucoup plus d'informations à propos de la vue elle-même.

Edit: La Hiérarchie de la Visionneuse fonctionne qu'avec le développeur de dispositifs. Les équipements de Production ne peut pas le faire pour des raisons de sécurité. Pour plus d'informations, veuillez jeter un oeil à la réponse suivante

1voto

Pyraman Points 9

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);

}
 

}

-1voto

Moritz Points 3760

Il n'y a pas de moyen direct, mais vous pouvez contrôler si et quelle activité doit venir au premier plan lorsque vous énoncez une intention.

Qu'est-ce que vous essayez d'atteindre? Peut-être que nous pouvons vous aider.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X