Как найти активность стека в приложении для Android? - PullRequest
20 голосов
/ 03 ноября 2011

У меня есть приложение с заданием стека задних операций A -> B -> C -> D -> E. Теперь в действии E я хочу узнать, какие действия задним стеком выполнялись.Как мне найти это?

Ответы [ 7 ]

5 голосов
/ 08 января 2015

Вы можете использовать «Действия активности adb shell dumpsys» Команда

для справки http://www.onsandroid.com/2015/01/find-back-stack-activities-in-android.html

5 голосов
/ 03 ноября 2011

Приведенный ниже код можно использовать для извлечения всех задач и верхней активности в каждой задаче в заднем стеке

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 голос
/ 27 февраля 2016

Я думаю, что вы можете сделать это, слушая изменения действий, с помощью этого API registerActivityLifecycleCallbacks:

https://developer.android.com/reference/android/app/Application.html#registerActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks)

https://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html

Это будетпоможет вам добавить в стек ваши собственные классы и видеть полное состояние по вашему желанию.

0 голосов
/ 30 августа 2015

Я рекомендую вам использовать startActivityForResult вместо startActivity, а затем для извлечения активности источника / источника вызовите getCallingActivity (). GetClassName ().

Как А узнает, что оно пришло из дома?Используйте getIntent (), его getAction () -> android.intent.action.MAIN и getCategories () -> android.intent.category.LAUNCHER

0 голосов
/ 20 января 2015

Поскольку getRunningTasks(..) устарело или если вы не хотите добавлять специальные разрешения к своему приложению, здесь есть альтернативное решение, если все действия принадлежат вам: вы можете пометить идентификатор (не само действие, это может быть в нужно собрать мусор) в синглтоне Stack, LinkedList или LinkedHashSet: в onPause() добавить идентификатор в стек и удалить его в onResume().

Вы можете проверить содержимое этих стеков, чтобы узнать, есть ли какие-либо действия и последовательность, в которой они были созданы.

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

0 голосов
/ 29 марта 2012

на самом деле, вы можете получить идентификатор задачи из runningtaskinfo, используя getRunningTasks, а затем получить недавнюю задачу, используя getRecentTasks, сравнив идентификатор задачи.теперь вы можете возобновить эту активность, используя startactivity, с базовым намерением в недавнем задании.

0 голосов
/ 03 ноября 2011

Я не уверен, что выздоровел ... Вы хотите вернуться к предыдущему занятию?Если это так, завершите текущее действие, вы вернетесь к предыдущему.

...