wake-up-neo.com

Wie finde ich Backstack-Aktivitäten in einer Android-Anwendung?

Ich habe eine Anwendung mit den Aktivitäten Backstack A -> B -> C -> D -> E. Jetzt möchte ich bei Aktivität E wissen, von welchen Backstack-Aktivitäten ich navigiert habe. Wie finde ich das?

20
azzits

Der folgende Code kann verwendet werden, um alle Aufgaben und die wichtigsten Aktivitäten innerhalb der einzelnen Aufgaben im hinteren Stapel zu extrahieren

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

Sie können den Befehl "adb Shell dumpsys activity" verwenden

als Referenzhttp://www.onsandroid.com/2015/01/find-back-stack-activities-in-Android.html

5
suresh

Ich denke, Sie können dies tun, indem Sie die Änderungen der Aktivitäten über diese API von registerActivityLifecycleCallbacks abhören:

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

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

Dies hilft Ihnen, einen Stapel Ihrer eigenen Klassen hinzuzufügen und den vollständigen Status nach Ihren Wünschen zu sehen.

1

Ich empfehle Ihnen, startActivityForResult anstelle von startActivity zu verwenden, um dann den Origin/source-Aktivitätsaufruf getCallingActivity (). GetClassName () abzurufen. 

Wie wird A wissen, dass es von zu Hause kam? Verwenden Sie getIntent () seine getAction () -> Android.intent.action.MAIN Und getCategories () -> Android.intent.category.LAUNCHER

0
Karan Bhandari

Ich bin mir nicht sicher, ob ich es gut verstanden habe ... Möchten Sie zur vorherigen Aktivität zurückkehren? Wenn ja, beenden Sie die aktuelle Aktivität und kehren Sie zur vorherigen zurück.

0
Quentin DOMMERC

Da getRunningTasks(..) veraltet ist oder wenn Sie Ihrer App keine speziellen Berechtigungen hinzufügen möchten, ist dies eine alternative Lösung, wenn alle Aktivitäten zu Ihren gehören: Sie können einen Bezeichner markieren (nicht die Aktivität selbst, es muss möglicherweise Müll gesammelt werden) ) in einem Singleton Stack, LinkedList oder LinkedHashSet: Fügen Sie in onPause() den Bezeichner zum Stack hinzu und entfernen Sie ihn in onResume()

Sie können den Inhalt dieser Stapel überprüfen, um festzustellen, ob Aktivitäten vorhanden sind und in welcher Reihenfolge sie erstellt wurden.

Sie können Ihren Code bereinigen und vergessen, das manuell durchzuführen, wenn alle Ihre Aktivitäten auf einer gemeinsamen Basisaktivität für Ihre App beruhen.

0
Gianluca P.

sie können die Task-ID mithilfe von getRunningTasks aus der ausführenden Task-Info abrufen. Anschließend können Sie die RecentTaskinfo mithilfe von GetRecentTasks abrufen, indem Sie die Task-ID vergleichen die recenttaskinfo.

0
Mikonos