我正在努力解决应用程序中的问题。我想提供一种方法来列出以前打开的活动的历史记录。
我认为有两种潜在的解决方案,但我不确定找到一种稳定的方式来实现其中任何一个。
- 以某种方式使用 SDK 中的函数。我尝试使用 getPackageManager() 和 getActivityManager(),但我找不到任何合适的解决方案
- 实现我自己的历史记录,但随后我将不得不覆盖 startActivity,我真的不想以这种方式下降,因为活动可以通过其他多种方式启动。
那么有没有办法使用 SDK 中的函数来做到这一点呢?
非常感谢。
编辑:
我有另一个想法,有点不同。是否可以使用某种接收器收听特定应用程序(我的)的"开始/结束活动"事件并跟踪堆栈历史记录?
使用 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();
}
那么有没有办法使用 SDK 中的函数来做到这一点呢?
不,对不起。
是否可以使用某种接收器收听特定应用程序(我的)的"开始/结束活动"事件并跟踪堆栈历史记录?
您可以在Application
上使用registerActivityLifecycleCallbacks()
,如果您只打算支持 API 级别 14 及更高版本(又名 Android 4.0+)。
您可以使用以下方法:
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());
}
获取活动堆栈的列表。
实现活动历史记录的一个非常简单的方法是使用类名
在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_list
static
,您可以一次打印所有历史记录,也可以通过以下方式访问历史记录中的特定活动index