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

时间:2012-12-02 22:07:07

标签: android android-activity

我正在努力解决我的应用中的问题。我想提供一种方法来列出以前开放活动的历史。

我认为有两种可能的解决方案,但我不确定是否能找到一种稳定的方法来实现它们。

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

有没有办法使用SDK中的函数来做到这一点?

非常感谢。

编辑:

我有另一个想法,它有点不同。是否可以使用某种接收器监听“开始/结束活动”事件到特定的应用程序(我的)并跟踪堆栈历史记录?

4 个答案:

答案 0 :(得分:27)

使用ADB命令:

1. adb shell dumpsys activity activities  -> displays list of activities in back stack

2. adb shell dumpsys activity process  -> displays list process in back stack

3. adb shell dumpsys activity intents  -> displays list of pending intents in back stack

4. adb shell dumpsys activity broadcast  -> displays list of broadcast in back stack

5. 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();
}

答案 1 :(得分:19)

  

有没有办法使用SDK中的函数来做到这一点?

不,抱歉。

  

是否可以使用某种接收器监听“开始/结束活动”事件到特定的应用程序(我的)并跟踪堆栈历史记录?

如果您只支持API等级14及更高版本(a.k.a.,Android 4.0 +),则可以在registerActivityLifecycleCallbacks()上使用Application

答案 2 :(得分:5)

您可以使用以下方法:

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());
}

获取活动堆栈列表。

答案 3 :(得分:-1)

实现活动历史记录的一种非常简单的方法是使用类名

activity_history_list

中定义mainActivity
public static List<String> activity_history_list;

以及您创建的每个活动的每个onStart() (例如MainActivity

 @Override
    public void onStart() {
        super.onStart();

        activity_history_list.add(MainActivity.this.getClass().getSimpleName());
    }

在另一项活动中(例如SettingActivity

 @Override
        public void onStart() {
            super.onStart();

            MainActivity.activity_history_list.add(SettingActivity.this.getClass().getSimpleName());
        }

只要activity_history_list,您就可以访问static, 您可以一次打印所有历史记录,也可以index

访问历史记录中的特定活动