2012-12-02 62 views
13

我正在努力解决我的应用程序中的问题。我想提供一种列出以前打开的活动的历史记录的方法。如何获取活动历史堆栈的列表?

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

  • 不知怎的,使用函数从SDK。我试着用getPackageManager()和getActivityManager(),但我无法找到任何合适的解决方案
  • 实现我自己的历史,但后来我不得不重写startActivity,我真的不希望这样下去作为一项活动可以以其他多种方式启动。

那么,有没有办法做到这一点使用函数从SDK?

非常感谢。

编辑:

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

回答

17

那么,有没有办法做到这一点使用函数从SDK?

不,对不起。

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

您可以在Application使用registerActivityLifecycleCallbacks(),如果你只打算支持API级别14及更高版本(也叫做Android 4.0以上版本)。

+0

真的很酷,我不知道那个! –

+0

如果我们使用registerActivityLifecycleCallbacks(),我们是否需要维护自己的堆栈?我实际上想要为我的应用程序显示一个ActivityRecords列表。我看到“adb shell dumpsys活动活动”显示一个TaskRecord,其中有多个“Hist#”项是ActivityRecords。我想要一个这些ActivityRecords的列表;至少是活动类名称。我没有找到任何方法得到这个。这是与参考。以我的问题:http://stackoverflow.com/questions/30095772/get-thumbnail-screenshot-of-activities-in-back-stack-of-android?noredirect=1#comment48303570_30095772 – AndroidGuy

+0

@AndroidGuy:“我们需要维护我们自己的堆栈?“ - 如果你想要一个堆栈,是的。 – CommonsWare

4

你可以用下面的方法:

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

获得活动堆栈的列表。

+0

我不是这种方法的忠实粉丝,它在文档中指定它只能用于调试目的。无论如何感谢:) –

+3

这只提供了任务列表,而不是堆栈中的活动列表(一个任务)。每个任务都包含numActivities,并且这些任务不在任何地方列出。 – 3c71

+2

只是一个评论。如果你想使用该方法,你必须在Android Manifest的权限列表中添加。 –

14

使用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 

使用活动经理:

​​
0

一个非常简单的方式实现活动历史与类名

mainActivity

定义 activity_history_list
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_liststatic, 您可以一次打印所有历史记录或访问历史记录中的特定活动index