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.
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.
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
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.:)
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
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
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);
}
}