2016-03-08 6 views
7

Also, ich habe 4 Aktivitäten Aktivität Activity1, Activity2, Activity3 und Activity4. Ich gehe von Activity1 dann auf ein Ereignis ich Activity2 dann auf ein Ereignis auf Activity2 beginne ich Activity3 als neue Aufgabe alssingleTask launchMode in Android funktioniert nicht

public void onClick(View v) { 
    Intent intent = new Intent(Activity2.this, Activity3.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK|Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
} 

Hier Activity2 launchMode ist decalared als singleTask starten.

Dann navigiere ich von Activity3 zu Activity4

Wenn ich anfangen Activity2 von Activity4 Ich glaube, es sollte

Backstack wie

Aufgabe A haben | Activity2 |

| Aktivität1 |

Aufgabe B

| Activity4 |

| Aktivität3 |

wie unten enter image description here

sondern neue Instanz von Activity2 wird hinzugefügt, um die aktuelle Aufgabe als

Aufgabe B

in Bild gezeigt | Activity2 |

| Activity4 |

| Aktivität3 |

Aufgabe A

| Activity2 |

| Aktivität1 |

kann mir bitte jemand helfen, dies zu verstehen?

+0

haben Sie den Flag 'launchMode =" singleTask "' auf Activity3-Tag in der Datei AndroidManifest.xml gesetzt. –

+0

Ja, ich habe das Flag 'launchMode =" singleTask "' gesetzt. – Sushant

+0

hey, verwenden Sie nicht dieses Flag 'Intent.FLAG_ACTIVITY_MULTIPLE_TASK' in der setFlags-Methode. Verwenden Sie einfach 'FLAG_ACTIVITY_NEW_TASK' und' FLAG_ACTIVITY_SINGLE_TOP' (falls erforderlich). –

Antwort

5

Android erstellt keine neue Aufgabe, es sei denn, die taskAffinity der Activity, die Sie starten möchten, unterscheidet sich von der taskAffinity der aktuellen Aufgabe. taskAffinity hat Vorrang vor allem anderen.

Wenn Sie wirklich eine separate Aufgabe starten möchten, werden Sie die taskAffinity des Activity3 wie folgt anpassen müssen:

<activity android:name=".Activity3" 
      android:taskAffinity=""/> 

Auch, obwohl Activity4 mit launchMode="singleTask" deklariert wird, Android wird ein nicht erstellen neue Aufgabe für sie, es sei denn, wenn eine andere taskAffinity von den anderen Aktivitäten hat.

Bitte beachten Sie, dass das Erstellen mehrerer Aufgaben für die gleiche Anwendung viele Nebenwirkungen hat.Sie sollten ein uniqyue-Symbol und eine eindeutige Bezeichnung für den Stamm Activity in jeder Aufgabe angeben. Andernfalls wird der Benutzer verwirrt, wenn er zu Ihrer App zurückkehren möchte (er kann nicht feststellen, welche der verschiedenen Aufgaben die richtige ist)). Außerdem kann taskReparenting auftreten, wodurch Aktivitäten unerwartet von einer Aufgabe zu einer anderen verschoben werden. Das ist alles sehr komplexe Sache und die meisten Entwickler verstehen es nicht vollständig und daher falsch.

Auch die Verwendung von FLAG_ACTIVITY_MULTIPLE_TASK ist sicherlich falsch. Der einzige Anwendungstyp, der dies benötigt, ist ein Startprogramm. Wenn Sie mehrere Tasks mit demselben Activity darin starten, können Sie nie zu einem bestimmten Programm zurückkehren und werden Ihren Benutzer völlig durcheinander bringen. Das ist definitiv nicht das, was du willst.

In den meisten Fällen benötigen Sie nicht mehrere Aufgaben, es verursacht normalerweise mehr Probleme als es löst. Bitte erläutern Sie, warum Sie mehrere Aufgaben benötigen.

Verwandte Themen