是否可以 dump/inspect 返回堆栈?

Is it possible to dump/inspect the back stack?

出于调试目的,我希望能够在后台堆栈中记录活动,但我没有看到任何 API 这样做,也没有在搜索时看到它被提及。有办法吗?

其实我也很纳闷这个问题。不幸的是没有。让我们想想为什么?

Java到我们手上:

1) Annotations - way with DI.(Reflection way) like a ButterKnife
2)父级class后台登录

public class MainActivity extends LogActivity //for ex

3) With Thread.currentThread().getStackTrace() 但你应该检查一下你现在停留在什么位置,你现在检查的线程是什么以及其他日常工作。

参考链接here, here and here

将此代码放在 MainActivity 的 onCreate 中

getSupportFragmentManager().addOnBackStackChangedListener(
            new FragmentManager.OnBackStackChangedListener() {
                public void onBackStackChanged() {
                    for (int i = 0; i < getSupportFragmentManager().getBackStackEntryCount(); i++)
                        System.out.println(getSupportFragmentManager().getBackStackEntryAt(i).getName());
                }
            });

打印的名称是调用addToBackStack时定义的:

...    
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
...
ft.addToBackStack(name);
...

您可以在 logcat 中看到输出。

您可以使用以下命令 adb shell dumpsys activity 它会打印很多东西,包括开头的返回堆栈:

Running activities (most recent first):
  TaskRecord{45168b4 #2194 A=com.example.myapp U=0 StackId=22 sz=3}
    Run #2: ActivityRecord{a05a1af u0 com.example.myapp/com.example.myapp.activity.MyActivity t2194}
    Run #1: ActivityRecord{5c017cd u0 com.example.myapp/com.example.myapp.activity.MySecondActivity t2194}
    Run #0: ActivityRecord{6fe38b2 u0 com.example.myapp/com.example.myapp.activity.MyThirdActivity t2194}

另一个解决方案是先输入 adb shell 并按回车键,然后输入 dumpsys activity | grep -i run。这只会显示返回堆栈,不会显示其他内容,但它需要两个命令。