32

我正在为我的应用程序中的一个问题而苦苦挣扎。我想提供一种方法来列出以前打开的活动的历史记录。

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

  • 以某种方式使用 SDK 中的函数。我尝试使用 getPackageManager() 和 getActivityManager() 但找不到任何合适的解决方案
  • 实现我自己的历史,但是我将不得不覆盖 startActivity 并且我真的不想这样下去,因为一个活动可以以其他多种方式启动。

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

非常感谢。

编辑:

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

4

4 回答 4

40

使用 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();
}
于 2015-02-03T10:27:27.663 回答
22

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

不,对不起。

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

如果您只支持 API 级别 14 及更高版本(又名 Android 4.0+),则可以使用registerActivityLifecycleCallbacks()on 。Application

于 2012-12-02T22:43:40.340 回答
6

您可以使用以下方法:

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

获取活动堆栈的列表。

于 2012-12-03T05:08:03.380 回答
-1

实现 Activity History 的一个非常简单的方法是使用类名

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

于 2018-01-08T12:53:21.600 回答