Android 查看任务';s活动堆栈
我刚开始开发一个简单的Android应用程序,而我还在学习这个平台 我正在使用带有ADT插件0.9.6的EclipseIDE 我需要知道是否可以查看与任务关联的Android 查看任务';s活动堆栈,android,android-activity,Android,Android Activity,我刚开始开发一个简单的Android应用程序,而我还在学习这个平台 我正在使用带有ADT插件0.9.6的EclipseIDE 我需要知道是否可以查看与任务关联的活动堆栈 有没有办法通过DDMS工具或其他技术 本质上,我需要的是能够看到任务的堆栈活动,以确保应用程序的行为符合预期 我知道,通过使用Intent对象中的标志和元素的一些属性,可以在某种程度上控制任务行为 不过,最好有一种工具,特别是在调试模式下,这样开发者就可以直接看到活动的堆栈了。在命令行中,您可以使用:adb shell dump
活动
堆栈
有没有办法通过DDMS工具或其他技术
本质上,我需要的是能够看到任务的堆栈活动,以确保应用程序的行为符合预期
我知道,通过使用Intent
对象中的标志和
元素的一些属性,可以在某种程度上控制任务行为
不过,最好有一种工具,特别是在调试模式下,这样开发者就可以直接看到
活动的堆栈了。在命令行中,您可以使用:adb shell dumpsys活动
这要求活动管理器打印其当前状态的转储。第一部分是按任务组织的完整活动历史记录。之后还会有很多东西被打印出来,所以你可能需要向上滚动一点来找到你想要的东西
下面是它的输出示例(具体内容因平台版本而异),显示了最重要的任务是与两个活动联系,后面是具有一个活动的启动器:
Activities in Current Activity Manager State:
* TaskRecord{44d07218 #4 A android.task.contacts}
clearOnBackground=true numActivities=2 rootWasReset=true
affinity=android.task.contacts
intent={act=android.intent.action.MAIN cat=[android.intent.category.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 (inactive for 14s)
* Hist #8: HistoryRecord{44b87a30 com.android.contacts/.ViewContactActivity}
packageName=com.android.contacts processName=android.process.acore
launchedFromUid=10004 app=ProcessRecord{44c4f348 1168:android.process.acore/10004}
Intent { act=android.intent.action.VIEW dat=content://com.android.contacts/contacts/lookup/144i148.144i461a29500afc8eeb/1927 cmp=com.android.contacts/.ViewContactActivity }
frontOfTask=false task=TaskRecord{44d07218 #4 A android.task.contacts}
taskAffinity=android.task.contacts
realActivity=com.android.contacts/.ViewContactActivity
base=/system/app/Contacts.apk/system/app/Contacts.apk data=/data/data/com.android.contacts
labelRes=0x7f090012 icon=0x7f02006b theme=0x7f0e0004
stateNotNeeded=false componentSpecified=false isHomeActivity=false
configuration={ scale=1.0 imsi=310/4 loc=en_US touch=3 keys=2/1/2 nav=2/2 orien=1 layout=34}
resultTo=HistoryRecord{44d174d0 com.android.contacts/.DialtactsContactsEntryActivity} resultWho=favorites resultCode=2
launchFailed=false haveState=false icicle=null
state=RESUMED stopped=false delayedResume=false finishing=false
keysPaused=false inHistory=true persistent=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}
packageName=com.android.contacts processName=android.process.acore
launchedFromUid=10004 app=ProcessRecord{44c4f348 1168:android.process.acore/10004}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.contacts/.DialtactsContactsEntryActivity bnds=[125,640][235,758] }
frontOfTask=true task=TaskRecord{44d07218 #4 A android.task.contacts}
taskAffinity=android.task.contacts
realActivity=com.android.contacts/.DialtactsActivity
base=/system/app/Contacts.apk/system/app/Contacts.apk data=/data/data/com.android.contacts
labelRes=0x7f090007 icon=0x7f02006b theme=0x7f0e0000
stateNotNeeded=false componentSpecified=true isHomeActivity=false
configuration={ scale=1.0 imsi=310/4 loc=en_US touch=3 keys=2/1/2 nav=2/2 orien=1 layout=34}
launchFailed=false haveState=true icicle=Bundle[mParcelledData.dataSize=4196]
state=STOPPED stopped=true delayedResume=false finishing=false
keysPaused=false inHistory=true persistent=false launchMode=2
fullscreen=true visible=false frozenBeforeDestroy=false thumbnailNeeded=false idle=true
* TaskRecord{44c4ee90 #2 A com.android.launcher}
clearOnBackground=true numActivities=1 rootWasReset=true
affinity=com.android.launcher
intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10600000 cmp=com.android.launcher/.Launcher}
realActivity=com.android.launcher/.Launcher
lastActiveTime=214734838 (inactive for 73483s)
* Hist #6: HistoryRecord{44c4d988 com.android.launcher/.Launcher}
packageName=com.android.launcher processName=android.process.acore
launchedFromUid=0 app=ProcessRecord{44c4f348 1168:android.process.acore/10004}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.android.launcher/.Launcher }
frontOfTask=true task=TaskRecord{44c4ee90 #2 A com.android.launcher}
taskAffinity=com.android.launcher
realActivity=com.android.launcher/.Launcher
base=/system/app/Launcher.apk/system/app/Launcher.apk data=/data/data/com.android.launcher
labelRes=0x7f0a0000 icon=0x7f020015 theme=0x103005f
stateNotNeeded=true componentSpecified=false isHomeActivity=true
configuration={ scale=1.0 imsi=310/4 loc=en_US touch=3 keys=2/1/2 nav=2/2 orien=1 layout=34}
launchFailed=false haveState=true icicle=Bundle[mParcelledData.dataSize=5964]
state=STOPPED stopped=true delayedResume=false finishing=false
keysPaused=false inHistory=true persistent=false launchMode=2
fullscreen=true visible=false frozenBeforeDestroy=false thumbnailNeeded=false idle=true
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);
}
}
当前活动管理器状态下的活动:
*TaskRecord{44d07218#4a android.task.contacts}
clearOnBackground=true numActivities=2 rootWasReset=true
affinity=android.task.contacts
intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]flg=0x10600000cmp=com.android.contacts/.dialtactivity bnds=[125640][235758]}
origActivity=com.android.contacts/.DialtactsContactsEntryActivity
realActivity=com.android.contacts/.DialtactsActivity
lastActiveTime=288203177(非活动14秒)
*Hist#8:HistoryRecord{44b87a30 com.android.contacts/.ViewContactActivity}
packageName=com.android.contacts processName=android.process.acore
launchedFromUid=10004 app=ProcessRecord{44c4f348 1168:android.process.acore/10004}
Intent{act=android.Intent.action.VIEW dat=content://com.android.contacts/contacts/lookup/144i148.144i461a29500afc8eeb/1927 cmp=com.android.contacts/.ViewContactActivity}
frontOfTask=false task=TaskRecord{44d07218#4a android.task.contacts}
taskAffinity=android.task.contacts
realActivity=com.android.contacts/.ViewContactActivity
base=/system/app/Contacts.apk/system/app/Contacts.apk data=/data/data/com.android.Contacts
labelRes=0x7f090012图标=0x7f02006b主题=0x7f0e0004
stateNotNeeded=false指定的组件=false isHomeActivity=false
配置={scale=1.0 imsi=310/4 loc=en_US touch=3键=2/1/2导航=2/2方位=1布局=34}
resultTo=HistoryRecord{44d174d0 com.android.contacts/.DialtactsContactsEntryActivity}resultWho=favorites resultCode=2
launchFailed=false haveState=false icicle=null
状态=恢复停止=错误延迟恢复=错误完成=错误
keysPaused=false inHistory=true persistent=false launchMode=0
全屏=真可见=真frozenBeforeDestroy=假ThumbnailRequired=假空闲=真
waitingVisible=false现在可见=true
*Hist#7:HistoryRecord{44d174d0 com.android.contacts/.DialtactsContactsEntryActivity}
packageName=com.android.contacts processName=android.process.acore
launchedFromUid=10004 app=ProcessRecord{44c4f348 1168:android.process.acore/10004}
Intent{act=android.Intent.action.MAIN cat=[android.Intent.category.LAUNCHER]flg=0x10200000cmp=com.android.contacts/.DialtactsContactsEntryActivity bnds=[125640][235758]}
frontOfTask=true task=TaskRecord{44d07218#4a android.task.contacts}
taskAffinity=android.task.contacts
realActivity=com.android.contacts/.DialtactsActivity
base=/system/app/Contacts.apk/system/app/Contacts.apk data=/data/data/com.android.Contacts
labelRes=0x7f090007图标=0x7f02006b主题=0x7f0e0000
stateNotNeeded=false指定的组件=true isHomeActivity=false
配置={scale=1.0 imsi=310/4 loc=en_US touch=3键=2/1/2导航=2/2方位=1布局=34}
launchFailed=false haveState=true icicle=Bundle[mParcelledData.dataSize=4196]
状态=停止停止=真延迟次数=假结束=假
keysPaused=false inHistory=true persistent=false launchMode=2
全屏=真实可见=虚假frozenBeforeDestroy=虚假ThumbnailRequired=虚假空闲=真实
*TaskRecord{44c4ee90#2a com.android.launcher}
clearOnBackground=true numActivities=1 rootWasReset=true
affinity=com.android.launcher
intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME]flg=0x10600000cmp=com.android.launcher/.launcher}
realActivity=com.android.launcher/.launcher
lastActiveTime=214734838(73483s不活动)
*Hist#6:HistoryRecord{44c4d988 com.android.launcher/.launcher}
packageName=com.android.launcher processName=android.process.acore
launchedFromUid=0 app=ProcessRecord{44c4f348 1168:android.process.acore/10004}
Intent{act=android.Intent.action.MAIN cat=[android.Intent.category.HOME]flg=0x10000000 cmp=com.android.launcher/.launcher}
frontOfTask=true task=TaskRecord{44c4ee90#2a com.android.launcher}
taskAffinity=com.android.launcher
realActivity=com.android.launcher/.launcher
base=/system/app/Launcher.apk/system/app/Launcher.apk data=/data/data/com.android.Launcher
labelRes=0x7f0a0000图标=0x7f020015主题=0x103005f
stateNotNeeded=true指定的组件=false isHomeActivity=true
配置={scale=1.0 imsi=310/4 loc=en_US touch=3键=2/1/2导航=2/2方位=1布局=34}
launchFailed=false haveState=true icicle=Bundle[mParcelledData.dataSize=5964]
s
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);
}
}
adb shell dumpsys activity activities | sed -En -e '/Stack #/p' -e '/Running activities/,/Run #0/p'
adb shell dumpsys activity activities | grep PACKAGE_NAME | grep Hist
adb shell dumpsys activity recents
adb shell dumpsys activity services
adb shell dumpsys activity providers
adb shell dumpsys activity broadcasts
adb shell dumpsys activity intents
adb shell dumpsys activity permissions