У меня есть приложение с действиями back stack A → B → C → D → E. Теперь в действии E, я хочу знать, какие операции назад назад я начал перемещаться. Как это найти?
Как найти действия стека в приложении Android?
Ответ 1
Нижеприведенный код может быть использован для извлечения всех задач и верхнего действия в каждой задаче в фоновом стеке
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();
}
Ответ 2
Вы можете использовать "действия активности dumpsys оболочки adb" .
для справки http://www.onsandroid.com/2015/01/find-back-stack-activities-in-android.html
Ответ 3
Я думаю, вы можете сделать это, прослушивая изменения в действиях, используя этот API-интерфейс registerActivityLifecycleCallbacks:
https://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html
Это поможет вам добавить в стек ваших собственных классов и увидеть полное состояние по своему усмотрению.
Ответ 4
Я не уверен, что все хорошо... Вы хотите вернуться к предыдущей деятельности? Если это так, закончите текущую деятельность, вы вернетесь к предыдущей.
Ответ 5
на самом деле, вы можете получить идентификатор задачи из runtaskinfo, используя getRunningTasks а затем, запустите lasttaskinfo с помощью getRecentTasks, сравните идентификатор задачи. теперь вы можете перезапустить эту активность, используя startactivity, с базовым элементом в файле currenttaskinfo.
Ответ 6
Поскольку getRunningTasks(..)
устарел или если вы не хотите добавлять специальные разрешения для своего приложения, это альтернативное решение, если все ваши действия являются вашими: вы можете пометить идентификатор (а не сами действия, это может быть в необходимо собрать мусор) в одноэлементном режиме Stack
, LinkedList
или LinkedHashSet
: in onPause()
добавить идентификатор в стек и удалить его в onResume()
.
Вы можете проверить содержимое этих стеков, чтобы узнать, есть ли какое-либо действие и последовательность, которую они создали.
Вы можете очистить свой код и забыть сделать это вручную, если все ваши действия основаны на общем базовом действии для вашего приложения.
Ответ 7
Я рекомендую вам использовать startActivityForResult вместо startActivity, затем для извлечения события-источника-источника getCallingActivity(). getClassName().
Как узнать, что это произошло из дома? Используйте getIntent() его getAction() → android.intent.action.MAIN и getCategories() → android.intent.category.LAUNCHER