Android 如何获取活动历史堆栈的列表?
我在我的应用程序中遇到了一个问题。我想提供一种方法来列出以前打开的活动的历史记录 我认为有两种可能的解决方案,但我不确定能否找到一种稳定的方法来实现其中任何一种Android 如何获取活动历史堆栈的列表?,android,android-activity,Android,Android Activity,我在我的应用程序中遇到了一个问题。我想提供一种方法来列出以前打开的活动的历史记录 我认为有两种可能的解决方案,但我不确定能否找到一种稳定的方法来实现其中任何一种 以某种方式使用SDK中的函数。我尝试使用getPackageManager()和getActivityManager(),但找不到任何合适的解决方案 实现我自己的历史记录,但是我必须覆盖startActivity,我真的不想这样做,因为活动可以通过其他多种方式启动 那么,有没有一种方法可以使用SDK中的函数来实现这一点 非常感谢 编
- 以某种方式使用SDK中的函数。我尝试使用getPackageManager()和getActivityManager(),但找不到任何合适的解决方案
- 实现我自己的历史记录,但是我必须覆盖startActivity,我真的不想这样做,因为活动可以通过其他多种方式启动
如果您只想支持API级别14及更高(又称安卓4.0+),则可以在
应用程序上使用registerActivityLifecycleCallbacks()
。您可以使用以下方法:
ActivityManager am = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);
int sizeStack = am.getRunningTasks(2).size();
for(int i = 0;i < sizeStack;i++){
ComponentName cn = am.getRunningTasks(2).get(i).topActivity;
Log.d("", cn.getClassName());
}
ActivityManager am=(ActivityManager)this.getSystemService(Context.ACTIVITY_服务);
int sizeStack=am.getRunningTasks(2.size();
对于(int i=0;i
获取活动堆栈的列表。使用ADB命令:
adb shell dumpsys activity activities # displays list of activities in back stack
adb shell dumpsys activity process # displays list process in back stack
adb shell dumpsys activity intents # displays list of pending intents in back stack
adb shell dumpsys activity broadcast # displays list of broadcast in back stack
adb shell dumpsys activity services # displays list of services running in back stack
使用活动管理器:
ActivityManager m = (ActivityManager) ctx.getSystemService( ctx.ACTIVITY_SERVICE );
List<RunningTaskInfo> runningTaskInfoList = m.getRunningTasks(10);
Iterator<RunningTaskInfo> itr = runningTaskInfoList.iterator();
while(itr.hasNext()){
RunningTaskInfo runningTaskInfo = (RunningTaskInfo)itr.next();
int id = runningTaskInfo.id;
CharSequence desc= runningTaskInfo.description;
int numOfActivities = runningTaskInfo.numActivities;
String topActivity = runningTaskInfo.topActivity.getShortClassName();
}
ActivityManager m=(ActivityManager)ctx.getSystemService(ctx.ACTIVITY_服务);
List runningTaskInfoList=m.getRunningTasks(10);
迭代器itr=runningTaskInfoList.Iterator();
while(itr.hasNext()){
RunningTaskInfo RunningTaskInfo=(RunningTaskInfo)itr.next();
int id=runningTaskInfo.id;
CharSequence desc=runningTaskInfo.description;
int numOfActivities=runningTaskInfo.numActivities;
字符串topActivity=runningTaskInfo.topActivity.getShortClassName();
}
实现活动历史记录的一个非常简单的方法是使用类名
在main活动中定义activity\u history\u列表
public static List<String> activity_history_list;
@Override
public void onStart() {
super.onStart();
activity_history_list.add(MainActivity.this.getClass().getSimpleName());
}
@Override
public void onStart() {
super.onStart();
MainActivity.activity_history_list.add(SettingActivity.this.getClass().getSimpleName());
}
在另一个活动中(例如设置活动
)
您可以在任何地方访问活动\u历史\u列表
,只要它是静态的
,
您可以一次打印所有历史记录,也可以通过索引访问历史记录中的特定活动。我不太喜欢这种方法,文档中指定了它,它应该仅用于调试目的。无论如何,谢谢:)它只提供任务列表,而不是堆栈中的活动列表(一个任务)。每个任务都包含numActivities,它们没有列在任何地方。只是一个注释。如果你想使用这个方法,你必须在Android清单中添加权限列表。2在这里是什么意思?有参考资料吗?@YuchenZhong检查文档:“列表中要返回的最大条目数。实际返回的条目数可能会更小,具体取决于用户启动了多少任务。”如果我们使用registerActivityLifecycleCallbacks(),我们需要维护自己的堆栈吗?实际上,我希望为我的应用程序显示一个ActivityRecords列表。我看到“adb shell dumpsys activity activities”(adb shell dumpsys activity activities)显示了一个TaskRecord,其中包含多个“Hist#”项,这些项都是ActivityRecords。我想要这些活动记录的列表;至少包含活动类名称。我找不到任何方法得到这个。这是关于我的问题:@AndroidGuy:“我们需要维护我们自己的堆栈吗?”——如果你想要一个堆栈,是的。