eigenes Programm wird vom ActivityManager beendet

C

cstarling

Neues Mitglied
0
Hallo,

ich entwickle ein Programm das, auch wenn es im Hintergrund liegt, ununterbrochen laufen soll.
Nach einiger Zeit wird dieses Programm aber einfach beendet.
Im LogCat steht dann folgendes:

10-28 16:42:13.821 I/ActivityManager( 6665): No longer want com.example (pid 23948): hidden #16

Wie kann ich verhindern, das mein Programm beendet wird?

Anm.:
Dieses Verhalten habe ich regelmäßig bei Samsung-Handys mit Android 2.3.x festgestellt.
Bei einem T-Mobile-Pulse-Handy mit 2.1 ist mir das noch nicht aufgefallen.

Danke im vorraus
cstarling
 
tja, so arbeitet android.

wenn du im hintergrund was laufen lassen willst, musst du einen service benutzen. aber auch bei diesem ist nicht garantiert, dass er "ewig" läuft. wird aber nach dem beenden bei bedarf wieder neu gestartet
 
swordi schrieb:
...musst du einen service benutzen.

Mein Programm hat aber auch eine Bedienoberfläche. Kann ein Service das?
 
nein services können nur im hintergrund laufen.

solange deine app im vordergrund ist, wird sie nicht beendet. eine bedienoberfläche im hintergrund macht ja keinen sinn. wo ist dann das problem, dass es beendet wird ?
 
Das Programm hat eine Bedienoberfläche, soll seine Arbeit aber auch tun wenn es in den Hintergrund gelegt wurde.
 
naja dann verlagerst du "die arbeit" in den service.

die GUI muss ja nicht "arbeiten" wenn sie im hintergrund ist.

genau dafür sind diese services gedacht
 
  • Danke
Reaktionen: cstarling
swordi schrieb:
wenn du im hintergrund was laufen lassen willst, musst du einen service benutzen. aber auch bei diesem ist nicht garantiert, dass er "ewig" läuft. wird aber nach dem beenden bei bedarf wieder neu gestartet

Wann/unter welchen Umständen wird ein Service beendet?
 
Ein Service wird beendet wenn, keine Clients mehr an ihn gebunden sind oder when Speicher knapp wird. Wenn wieder ausreichend Speicher verfügbar ist, sollte der Service mormalerweise automatisch wieder starten. Oder wenn ein Client
Context.startService(Intent)
exekutiert.
 
swordi schrieb:
naja dann verlagerst du "die arbeit" in den service.

die GUI muss ja nicht "arbeiten" wenn sie im hintergrund ist.

genau dafür sind diese services gedacht

Kann dann der hostende Prozess des Service weiterhin meine Oberfläche beinhalten? Ein Passage der Beschreibung aus deinem Link hört sich so an:

Caution: A service runs in the main thread of its hosting process—the service does not create its own thread and does not run in a separate process (unless you specify otherwise). This means that, if your service is going to do any CPU intensive work or blocking operations (such as MP3 playback or networking), you should create a new thread within the service to do that work. By using a separate thread, you will reduce the risk of Application Not Responding (ANR) errors and the application's main thread can remain dedicated to user interaction with your activities.

Und kann ich dann mit einem Aufruf "startForeground()" im Service erreichen, daß der gesamte Prozess aus Oberfläche und Service (normalerweise) nicht beendet wird?
 
cstarling schrieb:
Wann/unter welchen Umständen wird ein Service beendet?

cstarling schrieb:
Kann dann der hostende Prozess des Service weiterhin meine Oberfläche beinhalten? Ein Passage der Beschreibung aus deinem Link hört sich so an:

Caution: A service runs in the main thread of its hosting process—the service does not create its own thread and does not run in a separate process (unless you specify otherwise). This means that, if your service is going to do any CPU intensive work or blocking operations (such as MP3 playback or networking), you should create a new thread within the service to do that work. By using a separate thread, you will reduce the risk of Application Not Responding (ANR) errors and the application's main thread can remain dedicated to user interaction with your activities.

Und kann ich d
Code:
gesamte Prozess aus Oberfläche und Service (normalerweise) nicht beendet wird?

Glaube ich nicht. Der ActivityManager kontrolliert den Lebebszyklus deiner Activity. Entwickler können nur auf die Erreignisse des Lebenszyklus über Callbacks Einfluß nehmen, die da wären:

Activity Lifecycle

Beachte: Es ist weder die Reihenfolge, noch ob alle Erreignisse passieren, garantiert, wie Du dem Diagramm entnehmen kannst. Ausser natürlich onCreate(), onStart(), onStop().
 
Zuletzt bearbeitet:
setPersistent() kann eine Activity als persistent markieren, sprich sie wird mit höherer Priorität als die Activites von anderen Apps im Speicher gehalten.
Bitte aber jetzt nicht anfangen, das in alle deine Apps einzubauen - das sollte nur mit Bedacht und wenn es wirklich Sinn macht eingesetzt werden, wie z.B. bei einem Launcher.
Edit: Spontan fällt mir auch kein Grund ein, eine nicht-LauncherActivity persistent zu machen.
 

Ähnliche Themen

FabianDev
Antworten
5
Aufrufe
531
swa00
swa00
R
  • RudolfHagen
Antworten
1
Aufrufe
637
koje71
koje71
K
Antworten
1
Aufrufe
796
swa00
swa00
Zurück
Oben Unten