Ho un'applicazione con attività indietro stack A -> B -> C -> D -> E. Ora all'attività E, voglio sapere le attività di back stack da cui ho navigato. Come trovo questo ??Come ritrovare le attività di stack in un'applicazione Android?
risposta
Non sono sicuro di averlo capito bene ... Vuoi tornare all'attività precedente? In tal caso, termina l'attività corrente per tornare a quella precedente.
Il seguente codice può essere utilizzato per estrarre tutti i compiti e l'attività in alto all'interno di ogni attività nello stack posteriore
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();
}
Questo non è lo stesso del back stack: il back stack può coinvolgere più attività all'interno della stessa attività. Non penso che ci sia un modo per fare ciò che l'OP sta chiedendo. –
Anche questo richiede il permesso GET_TASK – for3st
A partire da LOLLIPOP (sdk 21+) questo è deprecato e restituisce solo un sottogruppo molto piccolo delle informazioni fornite nelle precedenti versioni per motivi di sicurezza – for3st
in realtà, è possibile ottenere l'ID attività dal runningtaskinfo utilizzando getRunningTasks e poi, ottenere il recenttaskinfo utilizzando getRecentTasks confrontando l'id dell'attività. ora è possibile riavviare quell'attività utilizzando l'attività di avvio, con l'intestazione di base nel recentaskinfo.
È possibile utilizzare "adb shell dumpsys attività attività" comando
per riferimento http://www.onsandroid.com/2015/01/find-back-stack-activities-in-android.html
Ho ora la lista delle attività in pila come posso uccidere? supponiamo che la 3a attività nello stack –
sia possibile farlo tramite codice? –
Come getRunningTasks(..)
è stato deprecato o se non si desidera aggiungere autorizzazioni speciali per la vostra applicazione qui è una soluzione alternativa se tutte le attività sono tue: puoi contrassegnare un identificatore (non l'attività in sé potrebbe essere necessario raccogliere i dati inutili) in un singleton Stack
, LinkedList
o LinkedHashSet
: in onPause()
a dd l'identificatore allo stack e rimuoverlo in onResume()
.
È possibile controllare il contenuto di tali pile per sapere se sono presenti attività e la sequenza che sono state create.
È possibile pulire il codice e dimenticarsi di farlo manualmente se tutte le attività derivano da un'attività di base comune per la propria app.
Si consiglia di utilizzare startActivityForResult anziché startActivity, quindi per recuperare l'attività origine/origine, chiamare getCallingActivity(). GetClassName().
Come farà a sapere che viene da casa? Usa getIntent() la sua getAction() -> android.intent.action.MAIN e GetCategories() -> android.intent.category.LAUNCHER
Penso che si possa farlo ascoltando le variazioni delle attività , tramite questa API di registerActivityLifecycleCallbacks:
https://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html
questo vi aiuterà ad aggiungere a una pila di proprie classi, e vedere lo stato completo come si desidera.
voglio trovare che all'attività E, ho navigato da A, B, C, D qualcosa di simile a questo – azzits
Va bene allora, Rajdeep Dua ha la risposta. : P –