1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

eigenes Programm wird vom ActivityManager beendet

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von cstarling, 04.11.2011.

  1. cstarling, 04.11.2011 #1
    cstarling

    cstarling Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    31.10.2011
    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
     
  2. swordi, 04.11.2011 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    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
     
  3. cstarling, 04.11.2011 #3
    cstarling

    cstarling Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    31.10.2011
    Mein Programm hat aber auch eine Bedienoberfläche. Kann ein Service das?
     
  4. swordi, 04.11.2011 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    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 ?
     
  5. cstarling, 04.11.2011 #5
    cstarling

    cstarling Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    31.10.2011
    Das Programm hat eine Bedienoberfläche, soll seine Arbeit aber auch tun wenn es in den Hintergrund gelegt wurde.
     
  6. swordi, 04.11.2011 #6
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    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
     
    cstarling bedankt sich.
  7. cstarling, 04.11.2011 #7
    cstarling

    cstarling Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    31.10.2011
    Wann/unter welchen Umständen wird ein Service beendet?
     
  8. swordi, 04.11.2011 #8
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    cstarling bedankt sich.
  9. mradlmaier, 05.11.2011 #9
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Beiträge:
    158
    Erhaltene Danke:
    17
    Registriert seit:
    28.10.2011
    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.
     
  10. cstarling, 07.11.2011 #10
    cstarling

    cstarling Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    31.10.2011
    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?
     
  11. mradlmaier, 07.11.2011 #11
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Beiträge:
    158
    Erhaltene Danke:
    17
    Registriert seit:
    28.10.2011
    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: 07.11.2011
  12. Fr4gg0r, 07.11.2011 #12
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    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.
     

Diese Seite empfehlen