2016-04-25 6 views
3

ich eine einzelne Instanz jeder Activity ich in meiner Anwendung starten halten wollen. Der launchMode war eine Option, aber es funktioniert nur für einen Activity.Halten Sie nur eine Instanz jeder Aktivität in ganzen App

Ich möchte

  • eine Activity zu starten, wenn es keine Instanz ist und sie aufgerufen wird.
  • und wenn eine andere Instanz dieser Activity bereits vorhanden ist, dann diese Instanz eine neue Instanz nach vorne, ohne die Schaffung dieser Activity gebracht wird. Diese Eigenschaft wird auf mehr als eine Activity angewendet.
  • Nein Activity garantiert, dass es immer an der Spitze des Verlaufsstapels sein wird.

Meine Arbeit bis jetzt:

Ich habe viele Anregungen, die für meinen Fall nicht gültig sind, so möchte ich diese darauf hinweisen, so dass keine andere Person denselben Vorschlag geben würde.

  • Ich habe die launchMode-singleTop gesetzt und das funktioniert nur, wenn die Activity an der Spitze der Geschichte Stapel ist. onNewIntent() wird nur aufgerufen, wenn Activity oben im Verlaufsstapel steht. und in meinem Fall kann die Activity an jeder Position im Stapel sein. Das funktioniert also nicht.
+0

Verwenden Sie singleTop auf jede Aktivität – Nfear

Antwort

5

Wenn Sie eine Activity starten, tun Sie es wie folgt aus:

Intent intent = new Intent(this, MyActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
startActivity(intent); 

Wenn eine Instanz dieses Activity bereits vorhanden ist, dann wird es nach vorne bewegt werden. Wenn eine Instanz NICHT existiert, wird eine neue Instanz erstellt.

+1

Arbeitete für mein Problem. Vielen Dank . –

+1

@David Wasser: dasselbe Problem für mich. Arbeitete für mein Problem, Prost! – AJW

0

Verwenden singleTop Startmodus statt (docs): Wenn es bereits eine Aktivität Instanz mit dem gleichen Typ an der Spitze des Stapels in der Anrufer Aufgabe ist, es keine neue Aktivität geschaffen würde, stattdessen wird eine Absicht sein Über onNewIntent() -Methode an eine Instanz einer vorhandenen Aktivität gesendet.

Siehe auch this article für Details zu den Startmodi.

+0

wird es versuchen. und lassen Sie wissen. –

+0

Also nehme ich an, dass die Aktivität oben auf dem Geschichtestapel sein muss, um in der gegebenen Bedingung zu funktionieren. und mein Fall ist das nicht. Bitte korrigieren Sie mich, wenn ich falsch bin @Marcin. –

+0

Ok, ich habe deine Frage etwas anders beantwortet. Eigentlich ist @david-wassers Antwort mit 'FLAG_ACTIVITY_REORDER_TO_FRONT' in Ordnung, ich bin gerade dabei, seine –

2

Sie können das android: launchMode Ihrer Aktivitäten singleTop In diesem Fall ist die, wenn die Aktivität bereits vorhanden ist, neue Absichten wird es nach vorne bringen, um die onNewIntent Aktivität geliefert werden() http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

Dies funktioniert, wenn Ihre Aktivität oben auf dem Stapel ist.

wenn Sie eine einzelne Instanz der Aktivität haben wollen, dann können Sie Ihr launchMode zu singleTask gesetzt, aber dies wird nicht empfohlen, da es Ihre Tätigkeit residieren machen werden in einer separaten Aufgabe, die verwirrend sein kann zu den Benutzern.

+0

ich nehme an, dass die Aktivität oben auf dem Geschichtestapel sein muss, um in Ihrem gegebenen Zustand zu funktionieren. und mein Fall ist das nicht. Bitte korrigieren Sie mich, wenn ich falsch bin @Mina. –

+0

Ja, Sie haben Recht, es muss auf der Oberseite des Stapels –

+0

sein, aber mein Fall ist anders. Bitte sehen Sie sich die bearbeitete Frage an. –