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

Rom*_*iel 23 android android-activity

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

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

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

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

非常感谢.

编辑:

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

Pra*_*eep 30

使用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
Run Code Online (Sandbox Code Playgroud)

使用活动管理器:

 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();
}
Run Code Online (Sandbox Code Playgroud)


Com*_*are 20

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

不,对不起

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

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


小智 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());
}
Run Code Online (Sandbox Code Playgroud)

获取活动堆栈的列表.

  • 这只提供了任务列表,而不是堆栈中的活动列表(一个任务).每个任务都包含numActivities,并且不会在任何地方列出. (3认同)
  • 只是评论.如果要使用该方法,则必须将<uses-permission android:name ="android.permission.GET_TASKS"/>添加到Android Manifest中的权限列表中. (2认同)