2016-08-11 1 views
0

Gibt es eine Möglichkeit zu wissen, ob der Onresume einer Aktivität aufgerufen wird, weil "Zurück-Schaltfläche" oder wenn aufgerufen wird, weil die interne Anwendung im Hintergrund war? Ich muss diese verschiedenen Aktionen protokollieren:/ Dies ist das Szenario: Ich habe 4 Aktivitäten A-B-C-D; Ich brauche die Navigation zwischen Aktivität zu protokollieren und ich will nicht die onResume durch Anwendung wake von Hintergrund verursacht loggt :)Protokollieren Sie, warum die Aktivität wieder aufgenommen wird

Antwort

1

Von Activity A, wenn Sie die Aktivität B/C/D starten, verwenden und Bezeichner und starten Sie die Aktivität für das Ergebnis.

Zum Beispiel:

int ActivityBID = 1; 
Intent i = new Intent(this, ActivityB.class); 
startActivityForResult(i, ActivityBID); 

in Ihrer Tätigkeit B außer Kraft setzen Sie die onBackPressed:

@Override 
public void onBackPressed() { 
    Intent intent = new Intent(); 
    intent.putExtra("activity","B") 
    setResult(RESULT_OK, intent);   
    finish(); 
} 

und Unterstützung für eine Aktivität:

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == ActivityBID) { 
     if(resultCode == RESULT_OK){ 
      String stredittext=data.getStringExtra("activity"); 
     }  
    } 
} 

Hinweis: Die innere wenn und die Variable ist nicht notwendig, weil Sie bereits wissen, aus welcher Aktivität Sie stammen, aber ich denke, y Vielleicht möchten Sie einige Daten in dieser Rücksendung weitergeben, also gehe ich dann.

bearbeiten Bild der ActivityForResult

Imagem

+0

Auf diese Art schreibe ich nur das Protokoll, wenn auf zurückgedrücktem Ereignis auftritt? Zum Beispiel: A-B-C-B mit dieser Methode werde ich nur B schreiben, wenn der Benutzer die App ohne Rückkehr zum A schließen? – aeroxr1

+0

Auf diese Weise können Sie sich im 'onActivityResult' anmelden, so dass der Code nur dann gesendet wird, wenn die Absicht ein ActivityResult hat. Wenn Sie die APP schließen, tritt dies nicht auf. Sie können andere Variablen wie ActivityBID erstellen, um die Aktivität zu identifizieren, aus der die Ergebnisse stammen. –

+0

Aber in Ihrem Code wird das Setresult nur aufgerufen, wenn der Benutzer die Zurück-Taste drückt? – aeroxr1

0

können Sie zum Beispiel überschreiben die onBackPressed() Rückruf

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    /* add your log here */ 
} 

Sammeln Sie das Protokoll von onResume() plus die (falls vorhanden) von onBackPressed() dann können Sie die verschiedenen Szenarien erkennen.

+0

Ich habe 4 Aktivitäten A-B-C-D; Ich muss die Navigation zwischen Aktivität protokollieren und ich möchte nicht die Onresume protokollieren, die durch Anwendung verursacht wird, die vom Hintergrund aufwacht :) – aeroxr1

1

exemplifizieren Wenn ein Activity pausiert, wird onPause() genannt. In onPause() schreiben Sie den Namen der Activity, die in eine globale static Variable pausiert wird.

Wenn ein Activity wieder aufgenommen wird, wird onResume() aufgerufen. Überprüfen Sie unter onResume, ob die globale Variable static den Namen Activity enthält. Wenn dies der Fall ist, können Sie die Protokolle weglassen, da Activity gerade pausiert/wieder aufgenommen wurde.

+0

Auf diese Weise haben ein kleines Problem. Wenn die Navigation A-B-A-C ist, schreiben Sie nur A-B-C. – aeroxr1

+1

Nein. Wenn ich von B nach A zurückkehre, wird 'B.onPause()' aufgerufen (schreibt "B" in das Globale), dann wird 'A.onResume()' aufgerufen (wird sehen, dass das Globale nicht "A" ist) ", so wird es" A "protokollieren. Hast du es tatsächlich versucht? –

+0

Morgen werde ich versuchen, scheint aber richtig :) – aeroxr1

Verwandte Themen