1

Short Version gedrückt:Android App öffnet zweite Instanz, wenn „gestartet“ nach zurück Taste

Eine Anwendung, die ich entwickelt haben öffnet eine zweite Instanz, wenn es „ins Leben gerufen“, nachdem die Zurück-Taste gedrückt wurde.

Lange Version:

Wenn die Anwendung aus dem „Home-Bildschirm“ gestartet wird es arbeitet Fein-, wenn die Anwendung in den Hintergrund gesendet wird durch die Zurück-Pfeil-Taste drücken, um die Kreis-Taste drücken oder die Quadrat-Taste, um zu einer anderen App wechseln - und dann wird die Anwendung über das Multitasking-Menü fortgesetzt es funktioniert perfekt - wieder genau dort, wo es aufgehört hat - nicht den Begrüßungsbildschirm wieder zu zeigen und vor allem nicht eine zweite Instanz zu öffnen. Jedoch wenn die Anwendung an den Hintergrund gesendet wird und dann wieder gestartet vom Startbildschirm eine zweite Instanz der Anwendung erstellt wird! Der Begrüßungsbildschirm wird erneut angezeigt, und die Hauptaktivität wird auf dem Bildschirm angezeigt und nicht die letzte Aktivität auf dem Benutzerbildschirm! Dies ist offensichtlich nicht das gewünschte Verhalten und viele Lösungen, die ich versucht habe, funktionieren nicht.

Manifest:

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme" 
    android:launchMode="singleInstance"> 
    <activity 
     android:name=".MainActivity" 
     android:screenOrientation="portrait" 
     android:launchMode="singleInstance"> 
    </activity> 
    <activity 
     android:name=".Settings_area" 
     android:screenOrientation="portrait" /> 
    <meta-data 
     android:name="com.google.android.geo.API_KEY" 
     android:value="AIzaSyDieXTCaFoIL0kJ_IM4UMBSQL3sNn92AWM" /> 

    <activity 
     android:name=".MapsActivity" 
     android:label="@string/title_activity_maps" /> 
    <activity android:name=".Splash" 
     android:launchMode="singleInstance"> 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

    </activity> 
    <activity android:name=".aboutPageActivity" /> 
    <activity android:name=".turnOffFromNotification" 
     android:noHistory="true"></activity> 
</application> 

Edit: Ich habe auch mit singleTask und singleInstance zu ersetzen launchMode in der Anwendung Tag versucht.

+0

Ich sehe Ihre Startaktivität 'singleInstance'. Vielleicht resultiert das in diesem Verhalten. – Shaishav

+0

Hallo @Shaishav Ich habe dies in singleTop und singleTask geändert - nichts scheint zu funktionieren! Hast du noch andere Vorschläge? Danke!! – traintrax8

+0

Versuchen Sie, den Startmodus zu entfernen. Gibt es einen Grund, warum Sie Ihre Aktivität in unabhängigen Aufgaben ausführen müssen? – Shaishav

Antwort

1

Wenn die Anwendung jedoch an den Hintergrund gesendet und dann vom Startbildschirm erneut gestartet wird, wird eine zweite Instanz der Anwendung erstellt! Der Begrüßungsbildschirm wird erneut angezeigt, und die Hauptaktivität wird auf dem Bildschirm angezeigt und nicht die letzte Aktivität auf dem Benutzerbildschirm!

Dies ist ein erwartetes Verhalten von Android. Die Zurück-Schaltfläche (ihre Standardimplementierung) ist für einen Benutzer vorgesehen, um das System zu benachrichtigen, dass er/sie mit dem aktuellen ActivityAndroidActivity Instanz zu lassen getan hat.

Beachten Sie, dass ein solches Verhalten nichts mit dem Attribut android:launchMode zu tun hat.

Dies ist offensichtlich nicht das gewünschte Verhalten und viele Lösungen, die ich versucht habe, funktionieren nicht.

Sie können es nicht ändern. Es ist eine Frage eines Benutzers, der sich dafür entschieden hat, Activity zu verlassen und das Betriebssystem, das die Activity Instanz zerstört, nicht mehr benötigt.

+0

Ausgezeichnet danke für die Informationen! Weißt du, wie ich die Anwendung nach vorne bringen könnte, wenn sie das Launcher-Symbol drücken, anstatt eine andere Instanz zu erstellen? – traintrax8

+0

Wenn die Instanz aktiv ist, wird durch Drücken von _ "Launcher-Symbol" _ der Vordergrund angezeigt, andernfalls wird eine neue Instanz erstellt. Anstatt mit dem beschriebenen Szenario zu kämpfen, empfehle ich, bei den Callbacks der 'Activity' (Lebenszyklus) (https://developer.android.com/guide/components/activities.html#Lifecycle) zu bleiben und den UI-Status in' onSaveInstanceState() ', dann, wenn ein Benutzer darauf zurückkommt, den Zustand in' onRestoreInstanceState() 'wiederherstellen. Auf diese Weise würde der Benutzer denken, als würde er von dem Ort ausgehen, an dem er/sie die Aktivität verlassen hat. – Onik

+1

Ausgezeichnet! Danke für diese Information! Es war sehr hilfreich! Ich werde versuchen, diese Lösung jetzt zu implementieren! Danke! – traintrax8

0

Die Situation wurde gelöst, indem android:launchMode="singleInstance"> von überall außer dem <application> Tag entfernt wurde. Anscheinend wird der Startmodus am besten verwendet, wenn das Ziel darin besteht, eine andere Aufgabe zu erstellen - was nicht das gewünschte Verhalten war. Stock Android maskiert dieses Verhalten, während die modifizierte Version von Android mit Touchwiz nicht.