J'ai une application avec des activités dans la pile arrière A -> B -> C -> D -> E. Maintenant, à l'activité E, je souhaite connaître les activités de la pile arrière dans lesquelles j'ai navigué. Comment je trouve ça ??
Le code ci-dessous peut être utilisé pour extraire toutes les tâches et l'activité principale de chaque tâche dans la pile arrière.
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();
}
Vous pouvez utiliser "activités d’activité de dumpsys adb Shell" command
pour référencehttp://www.onsandroid.com/2015/01/find-back-stack-activities-in-Android.html
Je pense que vous pouvez le faire en écoutant les changements des activités, via cette API de registerActivityLifecycleCallbacks:
https://developer.Android.com/reference/Android/app/Application.ActivityLifecycleCallbacks.html
Cela vous aidera à ajouter à une pile de vos propres classes et à voir l'état complet à votre guise.
Je vous recommande d'utiliser startActivityForResult au lieu de startActivity, afin de récupérer l'activité d'origine/source, appelez getCallingActivity (). GetClassName ().
Comment A saura-t-il que cela venait de chez vous? Utilisez getIntent () son getAction () -> Android.intent.action.MAIN Et getCategories () -> Android.intent.category.LAUNCHER
Je ne suis pas sûr de bien le comprendre ... Vous voulez revenir à l'activité précédente? Si c'est le cas, terminez l'activité en cours pour revenir à la précédente.
Puisque getRunningTasks(..)
est obsolète ou si vous ne souhaitez pas ajouter d'autorisations spéciales à votre application, voici une solution alternative si toutes les activités vous appartiennent: vous pouvez marquer un identifiant (l'activité n'est pas en elle-même mais elle risque d'être nécessaire). ) dans un singleton Stack
, LinkedList
ou LinkedHashSet
: dans onPause()
, ajoutez l'identifiant à la pile et supprimez-le dans onResume()
.
Vous pouvez vérifier le contenu de ces piles pour savoir s'il existe une activité et la séquence dans laquelle elles ont été créées.
Vous pouvez nettoyer votre code et oublier de le faire manuellement si toutes vos activités découlent d'une activité de base commune pour votre application.
en fait, vous pouvez obtenir l'identifiant de la tâche à partir de runningtaskinfo à l'aide de getRunningTasks , puis obtenir le recenttaskinfo à l'aide de getRecentTasks en comparant l'identifiant de la tâche. . Vous pouvez maintenant redémarrer cette activité à l'aide de startactivity, à l'aide de la baseintent in le recenttaskinfo.