开个头

在学习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;//taskIdint id = runningTaskInfo.id;ComponentName topActivity = runningTaskInfo.topActivity;//栈顶activity信息String className = topActivity.getClassName();Log.e("activityTask", "id == " + id + "\n" + "numActivity == " + numActivities + "\n" + "className == " + className);
} @Overrideprotected 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查看任务栈相关推荐

  1. Android查看任务栈

    Thanks 我是从这个博客学习到的: http://blog.sina.com.cn/s/blog_5de73d0b0102xky0.html 本文基于此博客进行一个划重点的记录. 明确问题: 即, ...

  2. ADB 查看 crash log

    有时候项目Crash 了, 我们可以使用adb 查看crash 信息 在终端中输入 adb shell 然后就是查看crash 命令 logcat -b crash 这样就能查看crash 的地方了.

  3. adb查看手机cpu使用率_记录一下Unity打包Android在骁龙cpu上概率性卡死的问题

    我们的游戏内测时有部分玩家反应在游戏进行到半路的时候会突然卡死,屏幕抖动,重启游戏后就没有这个问题. 经过统计发现出现卡死的手机全是骁龙cpu的,网上查了很久资料没有找到解决问题的办法,用adb查看到 ...

  4. windbg查看设备栈设备树学习总结

    用windbg寻找设备树根节点 http://blog.csdn.net/lixiangminghate/article/details/51729945 用ReactOS上明确说过,Pnp管理器对每 ...

  5. adb查看activity的堆栈信息

    adb查看activity的堆栈信息 adb shell dumpsys activity 该命令可以看到当前运行的是哪个activity,运行的一些进程等 看到运行的进程信息: ACTIVITY M ...

  6. Android adb查看网络连接情况

    Android adb查看网络连接情况 文章目录 Android adb查看网络连接情况 Android 使用adb查看网络使用情况主要的adb命令: 1.adb shell ifconfig 2.a ...

  7. adb查看手机设备型号、品牌、机型等信息

    adb查看手机设备型号.品牌.机型等信息 以下操作均基于ADB模式. 1.查看机型时,可以使用以下命令: adb shell getprop ro.product.model 2.如果我们忘记具体系统 ...

  8. adb 查看指定APP日志

    前面大概学习了adb基础,但是adb的存在,在测试人员中究竟有什么必要,以及看log时,那么多的log,让我们看个屁啊,所以这一次,我决定一定要把adb这件事情搞清楚. 1.先来看最感兴趣的adb日志 ...

  9. 使用adb查看手机中包含中文的目录或者文件(中文乱码问题)。

    默认情况下,我们进adb shell 查看包含中文的文件时,会出现乱码的情况, 这是由于CMD命令窗口默认使用的字符集是ANSI,而Android系统(linux)中使用的是UTF-8字符,所以我们只 ...

最新文章

  1. 对Oracle中索引叶块分裂而引起延迟情况的测试和分析
  2. 未入选新一轮“双一流”!两所高校官宣
  3. 《术以载道——软件过程改进实践指南》—第1章1.1节对CMMI的基本认识
  4. IOS UILabel 根据内容自适应高度
  5. 更改记录表CDHDR和CDPOS
  6. 使用numpy实现神经网络模块
  7. 关于计算机的网络作文,关于网络世界的作文
  8. mybatis like模糊查询_Java自学之mybatis:模糊查询和多条件查询
  9. CentOS环境设置Hbase自启动
  10. mysqldump批量备份恢复数据脚本
  11. 博弈论算法常见模型整理
  12. STM32F103C8T6 红外测距模块测量距离(SHARP GP2Y0A21YK0F)使用CubeMx生成HAL库(ADC)
  13. 图像匹配所用方法总结
  14. 多看电纸书如何安装第三方软件(如微信读书、梅糖桌面、Eink桌面等)
  15. 继续理解socekt具体使用--2
  16. radix在Character.MIN_RADIX与Character.MAX_RADIX之间
  17. 用于提升多样性的Maximum Mutual Information算法
  18. Mac电脑下好用的mac版远程控制远程桌面软件
  19. Elasticsearch语法知多少之Multi_match query
  20. 2015美国大学计算机科学专业排名,2015年USNews美国大学计算机科学专业研究生排名...

热门文章

  1. Android中Bitmap(图片)和Base64互相转换
  2. rollup-plugin-uglify | 解决报错TypeError: uglify is not a function
  3. 2022的你了解几种疫情防控好物?
  4. 注册GitHub账的详细步骤
  5. python调用excel宏_用Python如何开发Excel宏脚本?新手必学
  6. 用IP打开共享文件,提示文件共享不安全,需要过时的SMB1协议,你的系统需要SMB2或者更高的的版本
  7. oppor11s的位置服务器,OPPOR11s高配版和标准版区别是什么【详细介绍】
  8. WIN10 API打印CPU占用率
  9. MySQL多表关联关系与多表关联查询
  10. 测试接口是否通畅的两种方法