1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. Sentenza, 30.05.2012 #1
    Sentenza

    Sentenza Threadstarter Erfahrener Benutzer

    Hi ho
    Ich erzeuge testweise Views (die als Button verwendet werden sollen) zur Laufzeit (im Programmcode eines Kontextmenüs):
    Code:
                LinearLayout neu = new LinearLayout(this);
                neu.setBackgroundResource(R.drawable.knopf1_green);
                TermineView.addView(neu);
                TextView test = new TextView(this);
                test.setText("TEST");
                neu.addView(test);
                neu.setOnTouchListener(this);
                neu.setClickable(true);
                neu.setOnClickListener(this);
    Zum freigeben nutze ich (ebenfalls testweise) den OnClickListener:
    Code:
    @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            TermineView.removeView(v);
        }
    Das klappt auch wunderbar. Nur frage ich mich, als Java-Neuling, ob das Ding damit auch wirklich weg ist. Soweit ich es verstanden habe, werden Objekte in Java automatisch freigegeben sobald es keine Referenz mehr gibt. Mit removeView sollte ja zumindest die Referenz, die in meiner TermineView enthalten war, gelöscht werden - doch gibt es eventuell weitere? Im Context z.B.?

    Und kann man das irgendwo überprüfen, welche Objekte noch im Speicher sind, um eventuelle Lecks zu erkennen?
     
  2. Martin Wantke, 07.11.2012 #2
    Martin Wantke

    Martin Wantke Neuer Benutzer

    Werden aus dem aktuellen Gültigkeitsbereich heraus alle Referenzen durchlaufen, gelten alle Objekte die nicht erreicht werden als "gelöscht". Genau genommen markiert der Garbage-Collector diese Objekte erst und bereinigt sie dann, wenn es am günstigsten ist. Zum Beispiel wenn ein CPU-Kern schläft.

    Um Speicherlecks musst du dir bei Java in keinster Weise Gedanken machen. Auch wenn zum Beispiel der Graf zyklisch verläuft. Ist ein Verweis verschwunden, wird das Objekt definitiv bereinigt, die Frage ist nur wann.


    View TerminView -> LinearLayout neu -> TextView test

    Ist zur Laufzeit das "TerminView"-Objekt die einzigste Möglichkeit um das TextView zu erreichen, wird dieser gelöscht wenn das "TerminView"-Objekt den Verweis auf LinearLayout freigibt.
    Genau das machst du durch TermineView.removeView(v). Auch bei "TerminView = null" werden alle enthaltene Objekte gelöscht.

    Soweit ich weiß gibt es bei der Android-Programmierung bei dynamisch erzeugten Views ansonsten keine weiteren Referenzen. TermineView ist der einzige Container. Welche Views dort noch im Speicher sind, kann man mit Hilfe von getChildAt() und getChildCount() überprüfen.

    Bei kritischen Ressourcen im Allgemeinen muss man bei der automatischen Speicherverwaltung aufpassen. Es ist zum Beispiel ratsam ein Socket per close() zu schließen bevor der Garbage-Collector ihn markiert. Darum muss man sich bei Java selber kümmern.
     
    Sentenza gefällt das.
  3. Sentenza, 07.11.2012 #3
    Sentenza

    Sentenza Threadstarter Erfahrener Benutzer

    Auch wenns ein halbes Jahr her ist: danke ^^
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[ERLEDIGT] Komplexe View erstellen Android App Entwicklung 13.09.2017
[ERLEDIGT] LL zur Laufzeit erstellen, Abstand zwischen LL und LL möglich ? Android App Entwicklung 06.09.2017
[RÜCKMELDUNG FEHLT] Text und Bilder in View einbinden Android App Entwicklung 26.03.2017
[ERLEDIGT] View zum selektieren der Wochentage Android App Entwicklung 19.03.2017
Warum erhalte ich ein "IllegalArgumentException" zur Laufzeit ? Android App Entwicklung 02.02.2017
Fehlermeldung: Incorrectly called buildLayer on View: ShortcutAndWidgetContainer, destroying layer... Android App Entwicklung 30.01.2017
Buttonfarbe ständig wechseln Android App Entwicklung 06.01.2017
Viewelemente neu zeichnen Android App Entwicklung 04.01.2017

Benutzer fanden diese Seite durch die Suche nach:

  1. Android Layout zur laufzeit

    ,
  2. android cardview dynymisch erzeugen

    ,
  3. java android textview laufzeit

    ,
  4. View Android erzeugen
Du betrachtest das Thema "View zur Laufzeit erzeugen" im Forum "Android App Entwicklung",