我正在努力解决我的应用中的问题。我想提供一种方法来列出以前开放活动的历史。
我认为有两种可能的解决方案,但我不确定是否能找到一种稳定的方法来实现它们。
有没有办法使用SDK中的函数来做到这一点?
非常感谢。
编辑:
我有另一个想法,它有点不同。是否可以使用某种接收器监听“开始/结束活动”事件到特定的应用程序(我的)并跟踪堆栈历史记录?
答案 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