概述
开个头
在学习activity启动模式的时候,尤其是学到清单文件里taskaffinity这个属性和从其他应用打开本应用的某个activity时,都要对当前activity所在的栈的情况进行分析。那么如果获取activity所对应的栈呢?
用ActivityManager获取RunningTask
根据ActivityManager获取当前的任务栈(按手机的任务键,显示后台正在运行的程序,这些其实都是一个个的任务栈),也就是当前在屏幕运行的程序。获取到栈之后,再获取栈顶activity,也就是当前屏幕展示的activity。这样,就可以打印出来每个正在显示的activity的栈的信息。
简单看下代码
在BaseActivity里面
protected void getActivityTaskInfo() {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.RunningTaskInfo runningTaskInfo = manager.getRunningTasks(1).get(0);
//栈内activity数量
int numActivities = runningTaskInfo.numActivities;
//taskId
int id = runningTaskInfo.id;
ComponentName topActivity = runningTaskInfo.topActivity;
//栈顶activity信息
String className = topActivity.getClassName();
Log.e("activityTask", "id == " + id + "n" + "numActivity == " + numActivities + "n" + "className == " + className);
}
@Override
protected void onResume() {
super.onResume();
//在onResume()里面调用这个方法,就可以保证每当有页面跳转的时候,都可以打印出当前显示的Activity的所在栈的信息
getActivityTaskInfo();
Log.e(this.toString(), "----------------------------------onResume---------------------------------");
}
打印信息
这种查看方式也能稍微满足需求吧,但是总是不那么地优雅。
用adb查看任务栈信息
adb大家都清楚,是android sdk自带的一个工具,而且还比较的好用。
在windows系统中,配置好path环境变量(把adb.ext的路径添加到path里面,adb.exe就在sdk的platform-tools文件夹下)就可以用adb命令使用adb工具了。
在命令提示符中输入下面的命令,就可以查看所有任务栈的信息,可谓是极其方便。
adb shell dumpsys activity activities
可以看到,我按了虚拟机的多任务键后,显示手机现在有两个任务,也就是两个任务栈。并且在前台运行的是Phone这个界面。我们接下来看在命令提示符中打印的信息。由于日志很多,我们就截取了开头和中间我们用到的地方。
可以看到,红框里面的就是当前手机所有任务栈 和任务栈里面activity的信息。并且,每个任务栈内从下往上也是栈底到栈顶的顺序,整个框从下往上 也是任务从后台到前台的顺序。
TaskRecord{a5cf24e #4 A=com.example.hxytest U=0 sz=1}
其中 #4 就是任务栈的id,这个id也和我们上面用ActivityManager打印出来的id对应。
当我们把MainActivity切换到前台,把系统的拨打电话界面 切换到后台。再看adb的log
MainActivity跑到了系统DialtactsActivity上面。
ok,adb查看任务栈的东西就分享到这里。
如有错误,欢迎指正。
最后
以上就是伶俐口红为你收集整理的使用adb查看任务栈的全部内容,希望文章能够帮你解决使用adb查看任务栈所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复