Подтвердить что ты не робот

Как получить список стека истории событий?

Я борюсь с проблемой в своем приложении. Я хотел бы предоставить способ перечислить историю предыдущих открытых действий.

Я думаю, что есть два возможных решения, но я не уверен, что найду стабильный способ достижения любого из них.

  • Как-то использовать функцию из SDK. Я попытался использовать getPackageManager() и getActivityManager(), но я не могу найти подходящее решение.
  • Реализовать мою собственную историю, но тогда мне придется переопределить startActivity, и я действительно не хочу спускаться таким образом, так как деятельность может быть запущена другими несколькими способами.

Итак, есть ли способ сделать это, используя функцию из SDK?

Большое спасибо.

EDIT:

У меня есть другая идея, она немного другая. Можно ли прослушать события "начать/завершить деятельность" с каким-то приемником в конкретное приложение (мое) и отслеживать историю стека?

4b9b3361

Ответ 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