5

ich über eine andere Absicht zugegriffen haben nur die Möglichkeit für einen Benutzer hinzugefügt, um ihre Daten in meiner Anwendung wiederherzustellen, indem Sie eine benutzerdefinierte Dateityp das Sichern. Wenn die Datei von einem Datei-Explorer mit meiner App geöffnet wird, wird meine Stammaktivität (Hauptaktivität) geöffnet, aber in einer neuen Instanz. Wenn beispielsweise meine App geöffnet ist und die Wiederherstellungsdatei von einem Datei-Explorer aus geöffnet wird, wird eine neue Instanz meiner App in meiner Stammaktivität geöffnet. Im Task-Manager von android sieht das so aus, als ob meine App innerhalb des Datei-Explorers läuft, wenn das sinnvoll ist. Da der Wiederherstellungsvorgang Benutzerdaten ändert, ist es möglich, dass die ursprüngliche Instanz meiner App nicht mehr funktioniert, da sie sich in einer datenabhängigen Aktivität befand.Wie mehrere Instanzen von App zu behandeln, wenn

Wie kann ich mehrere Instanzen von meiner app zu verhindern, wenn es über eine andere Absicht wie folgt zugegriffen wird? Vielen Dank.

Update: Ich habe um gesucht und kann immer noch nicht eine Lösung finden. Hilfe wäre willkommen.

Intent-Filter für meine Stammaktivität in dem Manifest:

<manifest 
    android:launchMode="singleInstance" 
... 
<application 
    android:... > 
<intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 
<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <category android:name="android.intent.category.BROWSABLE" /> 
    <data android:scheme="file" android:pathPattern=".*\\.grdcsv" android:mimeType="*/*" android:host="*"/> 
</intent-filter> 

<!-- For email attachments --> 
<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="application/octet-stream" android:pathPattern=".*\\.grdcsv" android:scheme="content" /> 
</intent-filter> 

Antwort

3

Wie kann ich mehrere Instanzen von meiner app zu verhindern, wenn es über eine andere Absicht wie folgt zugegriffen wird?

Sie können versuchen, android:launchMode="singleTask" in Ihrer Aktivitätsdeklaration in Manifest zu verwenden. Wenn Sie die Dokumente sehen, heißt es:

Das System erstellt die Aktivität im Stamm einer neuen Aufgabe und leitet die Absicht dorthin. Wenn jedoch eine Instanz der Aktivität bereits vorhanden ist, leitet das System der Absicht, bestehende Instanz durch einen Aufruf seines onNewIntent() -Methode, anstatt einen neuen zu erstellen.

Dies wird wahrscheinlich keine neue Instanz erstellen, wie Sie in der Frage erwähnt haben. Versuch es. Lassen Sie mich wissen, wenn Sie immer noch das gleiche Problem haben.

+0

Dank, weil es * * nicht verhindern, es als eine neue Instanz aus starten. Ich habe jedoch zwei unerwünschte Nebenwirkungen gesehen. 1) Wenn ich die laufende App von der Desktopverknüpfung aus starte, beginnt sie bei der Stammaktivität und nicht dort, wo der Benutzer aufgehört hat. 2) Wenn ich meine benutzerdefinierte Dateierweiterung mit der App öffne, wird die App zur Stammaktivität gestartet, ohne die Aktion für die Datei aufzurufen. Ich muss die Aktivität erneut starten, um dieses Verhalten zu erhalten. Es ist so, als ob die Absichten durcheinander geraten. – NSouth

+0

@NSouth 'Versuche statt' singleTask' singleTop'. Was passiert jetzt? –

+0

Das ist tatsächlich, was es vorher war. Ich könnte es einfach verlassen, weil ich das nur mache, wenn sie ihre Daten wiederherstellen. Wenn sie eine offene Instanz haben und die zugrunde liegenden Daten sich durch eine andere Instanz ändern, stürzen sie ab, sollten aber von dort aus in Ordnung sein. Ich hoffe. – NSouth