Как получить список стека истории событий?
Я борюсь с проблемой в своем приложении. Я хотел бы предоставить способ перечислить историю предыдущих открытых действий.
Я думаю, что есть два возможных решения, но я не уверен, что найду стабильный способ достижения любого из них.
- Как-то использовать функцию из SDK. Я попытался использовать getPackageManager() и getActivityManager(), но я не могу найти подходящее решение.
- Реализовать мою собственную историю, но тогда мне придется переопределить startActivity, и я действительно не хочу спускаться таким образом, так как деятельность может быть запущена другими несколькими способами.
Итак, есть ли способ сделать это, используя функцию из SDK?
Большое спасибо.
EDIT:
У меня есть другая идея, она немного другая. Можно ли прослушать события "начать/завершить деятельность" с каким-то приемником в конкретное приложение (мое) и отслеживать историю стека?
Ответы
Ответ 1
Итак, есть ли способ сделать это, используя функцию из SDK?
Нет, извините.
Можно ли прослушивать события "запуск/завершение деятельности" с каким-то приемником на конкретное приложение (мое) и отслеживать историю стека?
Вы можете использовать registerActivityLifecycleCallbacks()
в Application
, если вы собираетесь поддерживать API уровня 14 и выше (a.k.a., Android 4.0 +).
Ответ 2
Использование команд 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();
}
Ответ 3
вы можете использовать следующий метод:
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());
}
получить список стека действий.
Ответ 4
Очень простой способ достижения истории активности - это имя классов
определите 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