I\'m struggling with an issue in my app. I\'d like to provide a way to list the history of the previous opened activities.
I think there are two potential solutions
So is there a way to do that using a function from the SDK?
No, sorry.
Would it be possible to listen to "start/finish activity" events with some kind of receiver to a specific app (mine) and keep track of the stack history?
You can use registerActivityLifecycleCallbacks() on Application, if you are only going to support API Level 14 and higher (a.k.a., Android 4.0+).
you can use the following method:
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());
}
get a list of the activity stack.
A very simple way to achieve Activity History is with classes name
define activity_history_list in your mainActivity
public static List<String> activity_history_list;
and in every onStart() of every activity you create
(for example MainActivity)
@Override
public void onStart() {
super.onStart();
activity_history_list.add(MainActivity.this.getClass().getSimpleName());
}
in a another activity (for example SettingActivity)
@Override
public void onStart() {
super.onStart();
MainActivity.activity_history_list.add(SettingActivity.this.getClass().getSimpleName());
}
You can access activity_history_list anywhere as long as it's static,
you can print all history at once or access a specific activity in history by index
Using ADB commands:
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
Using Activity manager:
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();
}