Android CPU Auslastung beim wiederholten Start/Beenden der Activitys

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Times, 20.10.2011.

  1. Times, 20.10.2011 #1
    Times

    Times Threadstarter Neuer Benutzer

    Beiträge:
    2
    Erhaltene Danke:
    0
    Registriert seit:
    20.10.2011
    Guten Morgen liebe Android Forumuser,

    ich habe ein kleines Problem mit meiner App.

    Also zuerst starte ich eine Activity "Anmeldung", welche mich bei einer erfolgreichen Anmeldung auf die Activity "Wiegemaske" leitet.

    Nun wenn ich auf der Wiegemaske den Zurück Button auf dem Handy drücke, habe ich folgenden Code eingetragen:

    Code:
    public void onDestroy()
            {
                super.onDestroy();
                Wiegemaske_Binder.SocketTrennen();
                Wiegemaske_Binder.TimerStartStop(false);
                unbindService(Wiegemaske_ServiceConnection);
                
                finish();
                
            }
    Nun zu meinem Problem:

    Starte App: 0-1% CPU-Auslastung
    Anmelden erfolgreich auf Wiegemaske: 0-1% CPU-Auslastung
    Zurück Button zur Anmeldung: 0-1% CPU-Auslastung

    Erneuts Drücken auf Anmelden, welche mich auf die Wiegemaske bringt:
    85-97% CPU-Auslastung UND mein Service dahinter funktioniert nicht mehr.


    Wird die Wiegemaske überhaupt richtig beendet? ... habe das Gefühl das diese weiter im Hintergrund läuft und sobald ich diese dann erneut starte es etwas aus dem Ruder läuft.

    Bitte um Hilfe!

    Mit freundlichen Grüßen

    Times
     
  2. Times, 10.11.2011 #2
    Times

    Times Threadstarter Neuer Benutzer

    Beiträge:
    2
    Erhaltene Danke:
    0
    Registriert seit:
    20.10.2011
    /push ...

    habe leider noch immer dieses Problem, hat niemand ein ähnliches Problem oder einen Lösungsversuch?! :)
     
  3. hadez, 13.11.2011 #3
    hadez

    hadez Android-Experte

    Beiträge:
    650
    Erhaltene Danke:
    92
    Registriert seit:
    18.07.2010
    Phone:
    Motorola Razr i
    lass das super.onDestroy(); mal weg (oder schieb es hinter die wiegemaskesachen) und mach aus dem finish(); ein this.finish();
     
  4. mradlmaier, 13.11.2011 #4
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Beiträge:
    158
    Erhaltene Danke:
    17
    Registriert seit:
    28.10.2011



    das inflaten eines Layouts ist natürlich resource-intensiv. Erklärt natürlich nicht warum es
    Beim ersten mal nur 1% und beim nächstenmal über 90% sind.

    Im übrigen solltest Du die onDestroy() nicht benutzen. Android garantiert nicht daß im Lebenszyklus einer Activity onDestroy() jemals aufgerufen wird.

    Laut SDK sind alle callbacks ab onPause() killable, d.h. optional.

    Die Methode finish() existiert zwar, aber sollte im Normalfall nie aufgerufen werden. Der ActivityManager weiss am besten wann es an der Zeit ist eine Activity zu killen.
    Es mag seltsam erscheinen, aber das hat damit zutun wie Benutzer ein Androidgerät bedienen.
    Z.b. der Benutzer hat deine App offen und befindet sich in einer bestimmten Activity. Eine SMS wird empfangen. Der Benutzer öffnet die entsprechende Activity um die SMS zulesen.
    Deine Activity verschwindet im Hintergrund, der ActivityManager schliesst sie aber nicht, da davon auszugehen ist, dass der Benutzer nach lesen der SMS, zu deiner Activity zurück kehren möchte. Da es sehr resourcenintensiv wäre, deine App neu zu starten, wird der ActivityManager alle Activities im Speicher halten solange es geht.
    Während unter Windows freier Speicher wünschenswert ist, ist in Android das Gegenteil der Fall.

    Also, lasst den ActivityManager seine Arbeit tun, und seid glücklich euch nicht um den Lebenszyklus und das Memorymanagement Gedanken zu machen. Euch ist sicherlich schon aufgefallen, daß die Mehrzahl aller Android Apps gar keinen 'Beenden' Button haben, und zwar genau aus genannten Gründen.
     
  5. mradlmaier, 13.11.2011 #5
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Beiträge:
    158
    Erhaltene Danke:
    17
    Registriert seit:
    28.10.2011
    Bemerkung: Ich habe nochmal in der SDK geguckt. Ab Honeycomb gibt es eine Änderung:
    alle callbacks bis einschliesslich onStop() werden aufgerufen. Dasgilt aber nur ab Android 3.0
     

Diese Seite empfehlen