2012-12-02 8 views
13

Sono alle prese con un problema nella mia app. Mi piacerebbe fornire un modo per elencare la cronologia delle attività aperte precedenti.Come ottenere un elenco dello stack cronologia attività?

Penso che ci siano due potenziali soluzioni ma non sono sicuro di trovare un modo stabile per ottenerne uno.

  • In qualche modo utilizzare una funzione dall'SDK. Ho provato a utilizzare getPackageManager() e getActivityManager() ma non riesco a trovare nessuna soluzione adatta
  • Implementa la mia cronologia, ma poi dovrò eseguire l'override di startActivity e non voglio davvero scendere in quella direzione come un'attività può essere avviato in altri modi.

Quindi c'è un modo per farlo utilizzando una funzione dall'SDK?

Molte grazie.

EDIT:

devo un'altra idea, è un po 'diverso. Sarebbe possibile ascoltare gli eventi di "inizio/fine attività" con qualche tipo di ricevitore su un'app specifica (la mia) e tenere traccia della cronologia dello stack?

risposta

17

Quindi c'è un modo per farlo utilizzando una funzione dall'SDK?

No, mi dispiace.

Sarebbe possibile ascoltare gli eventi di "inizio/fine attività" con qualche tipo di ricevitore su un'app specifica (la mia) e tenere traccia della cronologia dello stack?

È possibile utilizzare registerActivityLifecycleCallbacks() su Application, se si sta solo andando a supportare livello di API 14 e superiori (anche noto come, Android 4.0+).

+0

Davvero fantastico, non sapevo di quello! –

+0

Se usiamo registerActivityLifecycleCallbacks(), dobbiamo mantenere il nostro stack? Voglio effettivamente un elenco di ActivityRecords visualizzati per la mia applicazione. Vedo che "attività di attività di dumpys della shell adb" mostra un TaskRecord che ha più elementi "Hist #" che sono ActivityRecords. Voglio un elenco di questi ActivityRecords; almeno i nomi delle classi di attività. Non trovo alcun metodo per ottenere questo. Questo è con ref. alla mia domanda: http://stackoverflow.com/questions/30095772/get-thumbnail-screenshot-of-activities-in-back-stack-of-android?noredirect=1#comment48303570_30095772 – AndroidGuy

+0

@AndroidGuy: "abbiamo bisogno di mantenere il nostro stack? " - se vuoi uno stack, sì. – CommonsWare

4

è possibile utilizzare il seguente metodo:

ActivityManager am = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE); 

int sizeStack = am.getRunningTasks(2).size(); 

for(int i = 0;i < sizeStack;i++){ 

    ComponentName cn = am.getRunningTasks(2).get(i).topActivity; 
    Log.d("", cn.getClassName()); 
} 

ottenere un elenco della pila attività.

+0

Non sono un grande fan di questo metodo, è specificato nella documentazione che dovrebbe essere usato solo per uno scopo di debug. grazie comunque :) –

+3

Questo fornisce solo l'elenco delle attività, non l'elenco delle attività in una pila (un compito). Ogni attività contiene numActivities e quelle non sono elencate da nessuna parte. – 3c71

+2

Solo un commento. Se si desidera utilizzare tale metodo, è necessario aggiungere all'elenco delle autorizzazioni nel manifesto Android. –

14

Utilizzo dei comandi ADB:

1. adb shell dumpsys activity activities -> displays list of activities in back stack 

2. adb shell dumpsys activity process -> displays list process in back stack 

3. adb shell dumpsys activity intents -> displays list of pending intents in back stack 

4. adb shell dumpsys activity broadcast -> displays list of broadcast in back stack 

5. adb shell dumpsys activity services -> displays list of services running in back stack 

utilizzando Gestione attività:

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(); 
} 
0

Un modo molto semplice per raggiungere Storia attività è con le classi citarne

definire activity_history_list nel vostro mainActivity

public static List<String> activity_history_list; 

e in ogni onStart() di ogni attività si crea (ad esempio MainActivity)

@Override 
    public void onStart() { 
     super.onStart(); 

     activity_history_list.add(MainActivity.this.getClass().getSimpleName()); 
    } 

in un'altra attività (ad esempio SettingActivity)

@Override 
     public void onStart() { 
      super.onStart(); 

      MainActivity.activity_history_list.add(SettingActivity.this.getClass().getSimpleName()); 
     } 

È possibile accedere activity_history_list ovunque fino a quando si tratta di static, è possibile stampare tutta la cronologia in una volta o accedere a un'attività specifica nella storia da index

Problemi correlati