studio - ¿Cómo encontrar actividades de pila en una aplicación de Android?
programacion android pdf 2018 (7)
Tengo una aplicación con actividades en la parte trasera de la pila A -> B -> C -> D -> E. Ahora, en la actividad E, quiero saber las actividades de la pila de la parte trasera desde las que navegué. ¿Cómo encuentro esto?
Creo que puedes hacerlo escuchando los cambios de las actividades, a través de esta API de registerActivityLifecycleCallbacks:
https://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html
Esto te ayudará a agregar a una pila de tus propias clases y ver el estado completo que desees.
El código a continuación se puede usar para extraer todas las tareas y la actividad principal dentro de cada tarea en la pila trasera
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();
}
Le recomiendo utilizar startActivityForResult en lugar de startActivity, luego para recuperar la actividad de origen / origen, llame a getCallingActivity (). GetClassName ().
¿Cómo sabrá A que vino de casa? Use getIntent () su getAction () -> android.intent.action.MAIN y getCategories () -> android.intent.category.LAUNCHER
No estoy seguro de haberlo hecho bien ... ¿Desea volver a la actividad anterior? Si es así, finalice la actividad actual y volverá a la anterior.
Puede usar el comando "adb shell dumpsys activity activities"
para referencia http://www.onsandroid.com/2015/01/find-back-stack-activities-in-android.html
Si getRunningTasks(..)
ha quedado en desuso o si no desea agregar permisos especiales a su aplicación, esta es una solución alternativa si todas las actividades son suyas: puede marcar un identificador (no la actividad en sí es que puede ser necesaria) para ser recolectados en la basura) en una Stack
singleton, LinkedList
o LinkedHashSet
: en onPause()
agregue el identificador a la pila y elimínelo en onResume()
.
Puede verificar el contenido de esas pilas para saber si hay alguna actividad y la secuencia que se han creado.
Puede limpiar su código y olvidarse de hacerlo manualmente si todas sus actividades se derivan de una actividad base común para su aplicación.
en realidad, puede obtener el ID de tarea del runningtaskinfo utilizando getRunningTasks y luego, obtener el recenttaskinfo utilizando getRecentTasks comparando el ID de tarea. ahora puede reiniciar esa actividad utilizando startactivity, con el intérprete base en recenttaskinfo.