web-dev-qa-db-fra.com

Comment retrouver des activités de pile dans une application Android?

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 ??

20
azzits

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();
}
5
Rajdeep Dua

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

5
suresh

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.html#registerActivityLifecycleCallbacks(Android.app.Application.ActivityLifecycleCallbacks)

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.

1
android developer

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

0
Karan Bhandari

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.

0
Quentin DOMMERC

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.

0
Gianluca P.

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.

0
Mikonos