使用adb查看任务栈

开个头

在学习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查看任务栈的东西就分享到这里。

如有错误,欢迎指正。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值