Android CPU Auslastung beim wiederholten Start/Beenden der Activitys

T

Times

Neues Mitglied
0
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
 
/push ...

habe leider noch immer dieses Problem, hat niemand ein ähnliches Problem oder einen Lösungsversuch?! :)
 
lass das super.onDestroy(); mal weg (oder schieb es hinter die wiegemaskesachen) und mach aus dem finish(); ein this.finish();
 
Times schrieb:
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




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.
 
mradlmaier schrieb:
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.

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
 

Ähnliche Themen

S
  • Sempervivum
Antworten
2
Aufrufe
605
Sempervivum
S
M
Antworten
4
Aufrufe
1.168
swa00
swa00
5
Antworten
0
Aufrufe
1.141
586920
5
Zurück
Oben Unten