1

Ich erstelle Benachrichtigungen von einem Dienst. Diese Mitteilung enthält eine Absicht, dass A Aktivität erzeugen:Aktivität ausgelöst, wenn gestartet werden soll

... 
Intent intent = new Intent(this, A.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
... 

und Aktivität A, wenn Vorsatz empfängt, erzeugen Aktivität B unter Verwendung der gleichen Flagge.

Problem ist: Wenn ich derzeit nichts anzeigen (App ist geschlossen oder im Hintergrund), funktioniert es. Wenn ich auf Benachrichtigung klicken und Aktivität A wird aktuell angezeigt, funktioniert es auch, und ich habe diese Spur:

onActivityPaused(com.*****.A) 
onActivityCreated(com..*****.A) 
onActivityStarted(com..*****.A) 
onActivityResumed(com..*****.A) 
onActivityPaused(com..*****.A) 
onActivityCreated(com..*****.B) 
onActivityStarted(com..*****.B) 
onActivityResumed(com..*****.B) 
onActivityStopped(com..*****.A) 
onActivityDestroyed(com..*****.A) 
onActivityStopped(com..*****.A) 

(Etwas ist seltsam, weil A gestoppt zweimal während meiner Flagge FLAG_ACTIVITY_CLEAR_TOP sollte eine neue nicht neu erstellen ein?)

Aber wenn ich derzeit Aktivität B B, wird es gestartet dann gestoppt und zerstört ... Ich verstehe nicht, warum und ich brauche diese Aktivität zu (Neu-) starten. Hier die Spur:

onActivityPaused(com.*****.B)   ? Why existing B is not destroyed ? 
onActivityDestroyed(com.*****.A) 
onActivityCreated(com.*****.A) 
onActivityStarted(com.*****.A) 
onActivityResumed(com.*****.A) 
onActivityPaused(com.*****.A) 
onActivityCreated(com.*****.B) 
onActivityStarted(com.*****.B) 
onActivityResumed(com.*****.B) 
onActivityStopped(com.*****.B)  ?? 
onActivityDestroyed(com.*****.B)  ?? 
onActivityStopped(com.*****.A) 

Was vergesse ich?

EDIT:

Mein Manifest ist:

<activity 
     android:name="com.*****.A" 
     android:configChanges="keyboardHidden|orientation|screenSize" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.NoTitleBar" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name="com.*****.B" 
     android:launchMode="singleTop" //Try just now with this line, should I keep it? 
     android:configChanges="keyboardHidden|orientation|screenSize" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
    </activity> 
+0

Bitte senden Sie Ihre Manifest –

Antwort

1

Wenn Sie Intent.FLAG_ACTIVITY_CLEAR_TOP verwenden und bereits eine bestehende Instanz des Ziels Activity im Stapel haben, ist das Standardverhalten (Ziel) löschen alle Aktivitäten im Stapel von der obersten Activityzurück zu und einschließlich das Ziel Activity, dann erstellen Sie eine neue Instanz des Ziels Activity. In diesem Fall wird das neue Intent an onCreate() der neuen Instanz geliefert.

Wenn Sie nicht das Ziel Activity wollen neu erstellt werden, müssen Sie Intent.FLAG_ACTIVITY_CLEAR_TOP mit Intent.FLAG_ACTIVITY_SINGLE_TOP kombinieren, oder Sie benötigen, um Ihr Ziel Activity mit launchMode="singleTop" in the manifest. In this case, the new Intent will be delivered to onNewIntent() `der vorhandenen Instanz zu erklären.

+0

Danke für Ihre Antwort. 'onNewIntent' wird nie zur Aktivität aufgerufen ** B **. In meiner Benachrichtigung starte ich Aktivität ** A ** mit 'Intent.FLAG_ACTIVITY_CLEAR_TOP', und in Aktivität ** A **, Int Start Aktivität ** B ** mit' Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP' (Ich habe 'android: launchMode =" singleTop "' auch im Manifest für Aktivität ** B ** hinzugefügt, und es funktioniert nicht, 'onNewIntent()' wird nie für ** B ** aufgerufen. – N0un

+0

'ActivityB' ist nicht im Stapel vorhanden, wenn Sie es von' ActivityA' starten, also erstellt Android eine neue Instanz von 'ActivityB'. In diesem Fall wird 'onNewIntent() 'nicht aufgerufen. –

+0

Warum starten Sie 'ActivityB' von' ActivityA' mit diesen Flags? Was versuchst du zu machen? –

Verwandte Themen