是否可以 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
。这只会显示返回堆栈,不会显示其他内容,但它需要两个命令。
出于调试目的,我希望能够在后台堆栈中记录活动,但我没有看到任何 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
。这只会显示返回堆栈,不会显示其他内容,但它需要两个命令。