Android App mehrfach starten?

J

Johan

Dauergast
255
Da Android ja auf Linux basiert und multitaskingfähig ist, sollte es doch möglich sein, eine App mehrfach zu starten (z. B. ein Textverarbeitungsprogramm mehrfach mit unterschiedlichen Dateien ausführen).

Der Aufruf einer App funktioniert ja IMO über Intends. Kann man einen Intend so aufrufen, das er asynchron läuft (die aufrufende Activity nicht wartet, bis die aufgerufene beendet wird), man sich somit sozusagen einen eigenen App Launcher bauen kann. In allen mir bekannten (Multitasking-)Betriebssystemen gibt es dafür APIs zum Starten eines Prozess (einer Task) die warten und andere die nicht warten (sogar bei meinem Sinclair QL von 1984).

Im konkreten Fall würde ich mir gerne eine App schreiben, die die SoftMaker-Apps mehrfach startet. Mit dem ES-Dateiexplorer funktioniert es nicht. Klickt man da z. B. ein Textdokument an, wenn der TextMaker schon gestartet ist und ein anderes Dokument geladen hat, dann wird das in TextMaker durch das neue ersetzt (falls das geladene Dokument verändert wurde, kommt ein Hinweis, ob man speichern möchte). Selbst wenn ich einen zweiten (anderen) Datei-Manager verwende und ein anderes Text-Dokument darin anklicke, zeigt TextMaker dieses Verhalten.

Es müsste doch eigentlich möglich sein, eine App ein zweites mal zu starten. Android sollte es doch eigentlich egal sein, ob unterschiedliche Apps gleichzeitig laufen, oder ob eine App mehrfach läuft.

Gibt es da irgendwelche APIs im SDK mit denen man das bewerkstelligen kann, oder kann eine App es verhindern, dass sie mehrfach gestartet wird?
 
Meiner Meinung nach geht dies nicht, da jede Android App auf einem Android-System durch den Package-Namen in der Prozessliste identifiziert wird. Bei Merfachausführung könnte eine App nicht korrekt vom System angesprochen werden.
 
mal abgesehen davon, dass die Dinger Intent heißen (mit t) wäre die Frage wohl im Entwicklungsbereich besser aufgehoben.
 
Ich würde auch sagen das funktioniert nicht, da Android kein "echtes" Multitasking hat zumindest nicht so wie man es von anderen OS kennt.
Bei echtem Multitasking hat man das Problem, das man Programme selbst beenden müsste damit sie nicht einfach im Hintergrund weiterlaufen und Resourcen verbrauchen.

Sowas wie mehrere Dokumente öffnen muss die App selbst unterstützen.
Anders wird das meiner Meinung nach nichts.
 
Habe jetzt selbst mal gesucht und folgendes im SDK gefunden:

<activity>

Interessant ist hier android:launchMode (ungefähr in der Mitte der Seite) und hier insbesondere "standard" (Default!) und "singleTop". Bei beiden scheint es möglich zu sein, eine Activity (App) mehrfach zu starten.

Also scheint Android durchaus in der Lage zu sein, eine App mehrfach gleichzeitig ausführen zu können. Hätte mich auch gewundert, wenn das bei einem auf Unix aufbauenden System nicht möglich sein sollte.

@girounu: Ich habe die Frage auch ursprünglich in diesem Forum (in dem sie jetzt ja auch wieder ist :) gestellt, wurde versehentlich verschoben, und auf meine Bitte wieder hier rein verschoben.
 
Aber das hast du bei fremden Apps nicht in der Hand.
Da entscheidet der Entwickler wie er das handhabt.

Und ich glaube (hab ich mich ja hierbei auch schon geirrt ^^), selbst wenn das jedes mal eine neue Activity startet könnte es schwierig werden selbst zwischen den Activites zu wechseln.
Soweit ich weiß gibt es im System nämlich keine Möglichkeit direkt zwischen verschiedenen Activities einer App zu wechseln.
 
Nein, geht leider nicht. Jede App kann nur ein Hauptprozess haben. Ein zweiten kann man leider nicht starten, wenn man es versucht, landet man nur wieder im ersten Hauptprozess.

Eine Activity ist nur eine Komponente, davon kann eine App mehrere haben. Aber nur ein Activity kann aktiv und damit sichtbar sein.

Schau mal dort nach, im ersten Absatz steht alles wichtige:

Processes and Threads | Android Developers
 
Also das verstehe ich aber anders:

"By default, all components of the same application run in the same process and thread (called the "main" thread). If an application component starts and there already exists a process for that application (because another component from the application exists), then the component is started within that process and uses the same thread of execution. However, you can arrange for different components in your application to run in separate processes, and you can create additional threads for any process."

"... Sie können jedoch für unterschiedliche Komponenten ihrer Applikation einrichten, dass sie in unterschiedlichen Prozessen läuft, und sie können zusätzliche Threads für jeden beliebigen Prozess erzeugen."

Außerdem, falls ich von einem anderen Prozess (z. B. einem speziellem Launcher oder Dateimanager) eine Activity starte, die bereits in einem Prozess innerhalb der laufenden Application läuft, dann müsste dafür ja ein neuer Prozess generiert werden, bzw. sie läuft in dem Prozess, von der Applikation, aus der sie aufgerufen wurde. Ich muss das mal bei Gelegenheit mit meinem Aliza testen. Da bietet sich die Haupt-Activity dafür an, unterschiedliche Chats offen zu haben.

Es ist mir natürlich klar, dass das von einem der üblichen Launcher oder Dateimanager nicht funktioniert, da die immer nur zu der schon laufenden Applikation umschalten (die in den Vordergrund holen). Ich möchte ja selbst einen "Starter" schreiben, der eben ein neue Instanz erzeugt.
 
Ja und nein.

" Every application runs in its own process and all components of the application run in that process, by default" Processes and Threads | Android Developers / Overview

Eine App hat nur ein Hauptprozess, der ist für die GUI da. Activities laufen immer im Hauptprozess (Fragmente auch). Wenn man mehrere Prozesse braucht, startet man Service. Nicht alle Service haben einen eigenen Prozess. Sie müssen im mainifest eingetragen werden (backend oder remote) (Dabei sollte man keine SharedPreferences benutzen, gibt lustige Effekte ;) ). Diese Prozesse haben aber keine eigene GUI!. Alle Prozesse können Threads erzeugen.

Eine App kann eine andere App starten (Telefon usw.). Wenn diese Apps laufen, ist die eigene App im Background. Der GUI - Prozess schläft, die Service können optional weiter arbeiten.

Einen zweiten GUI - Prozess einer App kann man nicht starten. Man landet immer im ersten Hauptprozess. Das ist der Haken. Jede VM (spricht APP) kann nur ein GUI-Prozess haben.

Wie das genau implementiert ist: Android Security Overview | Android Developers
 

Ähnliche Themen

Laser5001
  • Laser5001
Antworten
2
Aufrufe
910
Laser5001
Laser5001
B
Antworten
4
Aufrufe
522
bb321
B
FabianDev
Antworten
5
Aufrufe
579
swa00
swa00
Zurück
Oben Unten