Exibir a pilha de atividades da tarefa
Comecei a desenvolver um aplicativo Android simples enquanto ainda estou aprendendo a plataforma.
Estou usando o Eclipse IDE com o plug-in ADT 0.9.6.
Preciso saber se é possível visualizar a Activitypilha associada a uma tarefa?
Existe alguma maneira através da ferramenta DDMS ou através de qualquer outra técnica?
Basicamente, o que eu preciso é poder ver a atividade da pilha de uma tarefa para garantir que o aplicativo se comporte conforme o esperado.
Eu sei que é possível controlar o comportamento da tarefa em certa medida através do uso de sinalizadores no Intentobjeto e através de alguns atributos do <activity>elemento.
No entanto, seria bom ter um tipo de ferramenta - especialmente no modo de depuração - que permitiria aos desenvolvedores ver a Activitypilha diretamente.
Se você estiver usando o Android Studio, eu publiquei uma solução [aqui] [1]. [1]: stackoverflow.com/a/22392616/1798991
— Nebu 13/14
Na linha de comando, você pode usar: adb shell dumpsys activity
Isso solicita que o gerente de atividades imprima um despejo de seu estado atual. A primeira parte disso é o histórico de atividades completo, organizado por tarefa. Depois disso, também há muitas coisas impressas, então você pode precisar rolar um pouco para encontrar o que deseja.
Aqui está um exemplo de sua saída (o conteúdo exato varia entre as versões da plataforma), mostrando a tarefa principal sendo contatos com duas atividades e, por trás disso, o iniciador com uma atividade:
Atividades no estado atual do Gerenciador de atividades:
intent = {act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER] flg = 0x10600000 cmp = com.android.contacts / .DialtactsActivity bnds = [125.640] [235.758]}
lastActiveTime = 288203177 (inativo por 14s)
* História nº 8: HistoryRecord {44b87a30 com.android.contacts / .ViewContactActivity}
launchFromUid = 10004 app = ProcessRecord {44c4f348 1168: android.process.acore / 10004}
Intenção {act = android.intent.action.VIEW dat = content: //com.android.contacts/contacts/lookup/144i148.144i461a29500afc8eeb/1927 cmp = com.android.contacts / .ViewContactActivity}
frontOfTask = tarefa falsa = TaskRecord {44d07218 # 4 A android.task.contacts}
labelRes = 0x7f090012 icon = 0x7f02006b tema = 0x7f0e0004
configuração = {escala = 1,0 imsi = 310/4 loc = pt_BR touch = 3 teclas = 2/1/2 nav = 2/2 orien = 1 layout = 34}
launchFailed = false haveState = false icicle = nulo
state = RESUMED parado = falso delayedResume = falso acabamento = falso
keysPaused = false inHistory = true persistente = false launchMode = 0
tela cheia = true visível = true frozenBeforeDestroy = thumbnail thumbnailNeeded = false idle = true
* História nº 7: HistoryRecord {44d174d0 com.android.contacts / .DialtactsContactsEntryActivity}
Intenção {act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER] flg = 0x10200000 cmp = com.android.contacts / .DialtactsContactsEntryActivity bnds = [125.640] [235.758]}
labelRes = 0x7f090007 icon = 0x7f02006b tema = 0x7f0e0000
launchFailed = false haveState = true icicle = Pacote configurável [mParcelledData.dataSize = 4196]
state = STOPPED parado = verdadeiro delayedResume = falso acabamento = falso
keysPaused = false inHistory = true persistente = false launchMode = 2
tela cheia = true visível = false frozenBeforeDestroy = thumbnail thumbnailNeeded = false idle = true
affinity = com.android.launcher
lastActiveTime = 214734838 (inativo por 73483s)
* História nº 6: HistoryRecord {44c4d988 com.android.launcher / .Launcher}
launchFromUid = 0 app = ProcessRecord {44c4f348 1168: android.process.acore / 10004}
Intenção {act = android.intent.action.MAIN cat = [android.intent.category.HOME] flg = 0x10000000 cmp = com.android.launcher / .Launcher}
labelRes = 0x7f0a0000 ícone = 0x7f020015 theme = 0x103005f
launchFailed = false haveState = true icicle = Pacote configurável [mParcelledData.dataSize = 5964]
existe uma boa maneira de mostrar todas as tarefas e atividades da pilha do aplicativo atual via logcat? realmente precisamos analisar o comando adb?
Além disso, se você quiser apenas ver o nome das atividades na pilha, faça isso: adb shell <enter> dumpsys activity | grep -i run .
Ótima resposta! Eu escrevi um script de conveniência que filtra a saída para obter as tarefas / atividades de um determinado pacote.
além de adb shell dmpsys activityvocê pode obter para cada lista, por exemplo, adb shell dmpsys activity activitiesACTIVITY MANAGER ACTIVITIES que contém pilha principal, atividades em execução e tarefas recentes. dumpsys activity intentspara intenções pendentes; dumpsys activity broadcastspara estado de transmissão; dumpsys activity providerspara provedores de conteúdo; dumpsys activity servicespara serviços; dumpsys activity processespara processos em execução.
O comando do @ SuryaWijayaMadjid pode ser feito em uma linha:, adb shell dumpsys activity | grep -i runou adb shell dumpsys activity activities | grep -i runpara uma saída um pouco mais limpa.
Você pode usar o seguinte comando em sua linha de comandos para ver as tarefas e as backstacks no sistema:
Ou você pode tentar o TaskLogger , uma ferramenta simples que criei que pode monitorar todas as atividades e tarefas em seu aplicativo e produzi-las no Logcat em tempo real.
— Gerald.K
+1 .... Eu tentei o seu TaskLogger, é uma boa ferramenta e me ajuda muito, mas imprime uma avalanche de logs indesejados.
— ThinkDeep
Sei que essa é uma pergunta antiga, mas essa funcionalidade agora está inserida no Android Studio:
Em seguida, no arquivo de texto resultante, procure ACTIVITY(todas em maiúsculas):
Acho que essa opção não existe mais, pois a nova janela do Android Profiler no Android Studio 3.0 substitui as ferramentas do Android Monitor.
Criei um problema para esta função ausente: issuetracker.google.com/issues/77944626; portanto, vote nele. Graças
Se você deseja inspecionar a pilha de tarefas de um pacote específico, o seguinte comando fará:
Eu sempre verifico esta parte das mensagens longas de despejo ..
Nota: A execução nº 4 é a atividade que você vê agora na tela. :)
— cmcromance
O que são "mensagens longas de despejo"?
@ MarianPaździoch "atividade adb shell dumpsys" nos mostra mensagens LONGAS. Essas mensagens, acima, são um pouco delas. By the way, eu tenho uma dica pode evitar isso. Execute isso, "atividades de atividade adb shell dumpsys". Você pode ver uma mensagem mais curta e ler mais facilmente sobre a pilha de atividades. :)
... e se essa lista ainda for muito longa, abra a lista Aplicativos Recentes e deslize algumas tarefas.
Você pode usar a ferramenta hierarchyviewer.bat. Faz parte do SDK do Android. Só funciona com emulador. Mas é muito mais confortável e mais claro.
Edit: Acabei de encontrar o Hierarchy Viewer no Eclipse! E funciona com dispositivos reais também. Basta abrir a perspectiva Windows-> Abrir perspectiva-> Exibição de hierarquia Na lista, você pode ver todos os dispositivos e emuladores conectados e a pilha de atividades. Além disso, na visualização em árvore, você pode ver muito mais informações sobre a visualização em si.
Editar: o Hierarchy Viewer funcionará apenas com dispositivos de desenvolvedor. Os dispositivos de produção não podem fazê-lo por razões de segurança. Para mais informações, consulte a seguinte resposta
— Xazen
O Visualizador de Hierarquia é para visualizar a hierarquia de Exibição de uma atividade. A pergunta era sobre a pilha de tarefas / atividades .
Para a lista de tarefas recentes
Para a lista de serviços em execução
Para obter a lista dos provedores de conteúdo atuais
Para a lista do estado Broadcast
Para a lista de intenções pendentes
Para a lista de permissões
Se você gosta de uma maneira mais GUI-sh, pode usar o AdbCommanderplug-in e adicionar esses comandos na macrosguia
— prot0n
Existe um plugin para isso agora:
Solução: 'adb shell dumpsys activity' não funciona com o TabActivity. Quando cada item da guia é selecionado, a atividade correspondente será iniciada. Mas quando usar 'adb shell dumpsys activity', ele sempre retorna a atividade 'main':