Android Memory Leak: Custom Adapter, Timer

Diskutiere Memory Leak: Custom Adapter, Timer im Mobile Geräte Forum; Hallo zusammen, ich habe mir eine App zusammengebastelt, welche regelmäßig eine Datenbank abfrägt. Das funktioniert auch alles soweit, jedoch...

  1. bronsetin
    bronsetin Neues Mitglied
    Hallo zusammen,
    ich habe mir eine App zusammengebastelt, welche regelmäßig eine Datenbank abfrägt. Das funktioniert auch alles soweit, jedoch stürzt die App nach einiger Zeit ab, da der Speicher voll läuft.
    Auf meinem Handy sehe ich unter "Bereinigen des Speichers", dass immer mehr speicher reserviert wird.

    Vielleicht hat jemand von euch eine Idee woran es liegen könnt?
    Im Anhang mal der Code
     

    Anhänge:

  2. Vielleicht hilft dir das kostenlose Training weiter --> (hier klicken)
  3. Robat
    Robat Aktives Mitglied
    Wie sieht denn deine onDestroy() Methode aus?
    "Löschst" du dort die bestehenden Requests auch ordnungsgemäß?
     
  4. bronsetin
    bronsetin Neues Mitglied
    Ich habe gar keine Methode onDestroy weder im CustomAdapter noch in der Aktivity...macht das nicht der garbage collector?

    Wo müsste ich die denn deiner Meinung nach einbauen CustomAdapter der Aktivity?
     
  5. Robat
    Robat Aktives Mitglied
    Hast du dich schon mal mit dem Lifecycle von Activities auseinander gesetzt? :p

    Schau mal hier nach.

    Gerade bei einer App wie deiner ist es wichtig den Lifecycle zu beachten um genau solche Dinge zu verhindern :)
     
  6. bronsetin
    bronsetin Neues Mitglied
    Hallo,
    hast du richtig bemerkt, bin noch relativ neu in der Android Welt, danke für den Tipp

    public class MenueActivity extends AppCompatActivity {
    ...
    @Override
    protected void onDestroy(){
    //BezeichnungAbteilung = "";
    adapter.clearData();
    }

    In die Funktion onDestroy() in der MenueActivity wird leider nicht gesprungen, durch meinen Timer, nur wenn ich den Button drücke, was somit nicht mein Problem löst, denn bei jedesmal wenn der Timer auslöst, bekomme wird mehr speicher reserviert
     
  7. Robat
    Robat Aktives Mitglied
    Ich würde dich einfach mal auf diese Seite weiter leiten.

    Dort ist relative schön erklärt, wie man mit Hilfe von Android Studio Tools (wenn du Android Studio benutzt) herausfinden kann an welcher Stelle genau (und welche Objecte) den Leak verursachen.

    Und noch mal kurz zum Garbage Collector: Das ist ein häufig gemachter Anfängerfehler, dass man denkt nicht mehr auf Speicherreservierung achten zu müssen. Wird auf der Seite auch unter dem Punkt: "What about the Garbage Collector" erklärt :)

    Gruß
    Robert
     
  8. bronsetin
    bronsetin Neues Mitglied
    Und was kann ich jetzt mit dem anfangen, das ist mir zu hoch im Moment, da steig ich nicht durch :(
     

    Anhänge:

  9. Robat
    Robat Aktives Mitglied
    Also der Leak scheint definitiv vom Request zu kommen.

    Folgende Idee meiner Seits:

    Da du dein StringRequest als anonyme Klasse implementiert hast, herrscht eine implizite Referenz zu der äußeren Klasse. (deine Activity).
    Es kann also gut sein, dass daher der Leak kommt. Versuch deinen StringRequest mal in eine eigene Klasse auszulagern.

    Solltest du einen Denkanstoß brauchen schau bspw. mal hier nach.
     
  10. bronsetin
    bronsetin Neues Mitglied
    Hallo,
    das habe ich auch versucht, der Speicher steigt aber trotzdem.

    So rufe ich diesen auf:
    Map<String, String> parameters = new HashMap<String, String>();
    parameters.put("BEREICH", "10");
    parameters.put("ABTEILUNG", "0");

    RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());

    CustomRequest jsObjRequest = new CustomRequest(com.android.volley.Request.Method.POST, showSQLTest, new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
    try {
    if (response.contains("[]") != true) {
    System.gc();
    ...
     

    Anhänge:

  11. Robat
    Robat Aktives Mitglied
    Da hast du den Listener ja immer noch als anonyme Klasse ;)
    Versuch den mal auch auszulagern.
     
  12. Schau dir jetzt hier den Kurs an und lerne Java zu programmieren: --> Hier klicken, um mehr zu erfahren (Klick)
Die Seite wird geladen...

Memory Leak: Custom Adapter, Timer - Ähnliche Themen

Memory-Leak in BlockingQueue
Memory-Leak in BlockingQueue im Forum Allgemeine Java-Themen
Android: Memory leak
Android: Memory leak im Forum Mobile Geräte
Memory leaks bei DB Abfrage
Memory leaks bei DB Abfrage im Forum Datenbankprogrammierung
org.hibernate.impl.SessionFactoryImpl Memory Leak
org.hibernate.impl.SessionFactoryImpl Memory Leak im Forum Data Tier
Java6 Methode in Java5 verwenden (memory leak JInternalFrame)
Java6 Methode in Java5 verwenden (memory leak JInternalFrame) im Forum AWT, Swing, JavaFX & SWT
Thema: Memory Leak: Custom Adapter, Timer