Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何获取活动历史堆栈的列表?_Android_Android Activity - Fatal编程技术网

Android 如何获取活动历史堆栈的列表?

Android 如何获取活动历史堆栈的列表?,android,android-activity,Android,Android Activity,我在我的应用程序中遇到了一个问题。我想提供一种方法来列出以前打开的活动的历史记录 我认为有两种可能的解决方案,但我不确定能否找到一种稳定的方法来实现其中任何一种 以某种方式使用SDK中的函数。我尝试使用getPackageManager()和getActivityManager(),但找不到任何合适的解决方案 实现我自己的历史记录,但是我必须覆盖startActivity,我真的不想这样做,因为活动可以通过其他多种方式启动 那么,有没有一种方法可以使用SDK中的函数来实现这一点 非常感谢 编

我在我的应用程序中遇到了一个问题。我想提供一种方法来列出以前打开的活动的历史记录

我认为有两种可能的解决方案,但我不确定能否找到一种稳定的方法来实现其中任何一种

  • 以某种方式使用SDK中的函数。我尝试使用getPackageManager()和getActivityManager(),但找不到任何合适的解决方案
  • 实现我自己的历史记录,但是我必须覆盖startActivity,我真的不想这样做,因为活动可以通过其他多种方式启动
那么,有没有一种方法可以使用SDK中的函数来实现这一点

非常感谢

编辑:

我有另一个想法,有点不同。是否有可能通过某种特定应用程序(我的)的接收器收听“开始/完成活动”事件并跟踪堆栈历史

那么,有没有一种方法可以使用SDK中的函数来实现这一点

不,对不起

是否有可能通过某种特定应用程序(我的)的接收器收听“开始/完成活动”事件并跟踪堆栈历史


如果您只想支持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:“我们需要维护我们自己的堆栈吗?”——如果你想要一个堆栈,是的。