Allocated Memory wächst Grundlos obwohl ich alles freigebe!

  • Hi,


    bei mir stürzen ständig MediaPlayer oder einzelne Töne im soundpool ab wenn ich ein paar mal zwischen den Activitys hin und her switche.
    Ein Blick auf den Memory Monitor verrät mir, das mein allokierter Speicher immer größer wird. Selbst wenn ich auf ein ImageView drücke steigt er ständig an. Ich verlasse meine Activitys mit finish() und gebe mein soundpool sowie den Mediaplayer mit release() frei. Sonst benutze ich nur buttons und imageViews. Muss ich die auch freigeben?


    Der Mediaplayer stürzt nämlich ab weil schon zu viel Speicher allokiert ist(ca. 40mb).
    Und noch ne frage: Wenn ich eine neue activity Aufrufe mit:



    Intent spracheUebergeben2 = new Intent(this, gameTest.class);
    spracheUebergeben2.putExtra("sprache", savedLanguage);
    spracheUebergeben2.putExtra("MusicPos", musicPosition);
    startActivity(spracheUebergeben2);


    und danach noch finish() Aufrufe, wird das dann noch ausgeführt?


    Gruß


    kani

    Zitat von androidKani


    Wer programmiert kann scheitern aber wer nicht programmiert der ist schon gescheitert!

  • Wozu rufst du finish(); auf?
    Das wollte ich dich davor schon fragen ...


    Mal mal daraus "startActivityForResult();" - oder belasse es so, wenn es auch so geht. Aber ein finish(); solltest du da nicht hinbauen.


    Du kannst dir das ja so vorstellen:


    MainActivity - das Erste, was du siehst, wenn du die App startest.
    Solltest du andere Activities aufrufen, so stapelst du die neu aufgerufenen auf die nächste Activity.
    Zur Verdeutlichung - du rufst von der MainActivity eine zweite auf - ZweiteActivity - und von dieser wiederum eine dritte - DritteActivity.


    • DritteActivity
    • ZweiteActivity
    • MainActivity


    Um wieder zurückzukehren kannst du "finish();" nutzen. Demnach solltest du dich von oben nach unen abarbeiten.
    Der "Back-Button" ist ja in dem Fall nur ein "finish();" - je nachdem, ob du noch was eingeben kannst oder sowas.
    Versuch's einfach mal.


    Nutze "finish();" nur dann, wenn du z.B. einen Button "Abbrechen" hast in der Activity - z.B. klickst du auf ein Listenitem, bist in einer neuen "Änderungsactivity" und von dieser drückst du "Abbrechen" oder "Bestätigen" - dann kannst du das auch einsetzen.


    Fazit:
    Keine Ahnung, ob dies dein Problem löst. :D

  • Ich werde es gleich mal versuchen. Finish () benutze ich wenn ich von level 1 ins level2 gehe und die activity level1 nicht mehr benutze. Damit will ich den allokierten Speicher freigeben.
    Muss ich ImageViews selber wieder releasen so wie den media player? Und ist ein allokierter speicher von 40mb normal fur eine kleine app?

    Zitat von androidKani


    Wer programmiert kann scheitern aber wer nicht programmiert der ist schon gescheitert!

  • Die app zeigt 12 bilder an(zahlen). Danach wird eine Zahl genannt (ton aus dem soundpool). Und dann muss man auf die zahl drücken. Diese verschwindet danach.
    Ich habe ein galaxyS4 also eigentlich genug Ram(wieviel ich davon nutzen kann weiss ich noch nicht).Trotzdem wird der alokierte speicher nicht wieder freigegeben. Erstsunlicher weise wird jedesmal wenn ich auf ein Bild drücke um 0,01mb mehr Speicher allokiert.

    Zitat von androidKani


    Wer programmiert kann scheitern aber wer nicht programmiert der ist schon gescheitert!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!