Frage zu Objekten und Speicherverwaltung

D

Droidspirit

App-Anbieter (In-App)
50
Hallo,

kurz vorweg: Ich bin Java/RCP Entwickler und mußte mir bisher noch keine großen Gedanken um Speicherverwaltung machen, weil das bei den heutigen PC-Systemen eigentlich ja kaum noch ein Thema ist. Anders bei Android, da man hier auf den mobilen Entgeräten ja nur begrenze Resourcen zur Verfügung hat.

Ich bin gerade dabei eine Service-Schicht für eine Android-Anwendung zu bauen, die auf einer SQLiteDatabase basiert. In dieser Datenbank gibt es mehrere Tabellen und einige Auflöser-Tabellen.

Ich habe zu jeder Tabelle eine Objekt-Klasse und die Datenbank-Attribute dort als Variablen hinterlegt (ganz normale Table-Objekte halt, mit getter und setter). Auf die Datenbank greife ich größtenteils über die Methoden query und rawQuery zu.

In den Auflöser-Tabellen werden die ID-Referenzen abgelegt, um eine n:m Beziehung zwischen zwei Tabellen bzw. Objekten abzubilden.

Ich habe diese Auflöser-Tabellen nun wie folgt in einer Klasse beschrieben:

Code:
Auflöser-Klasse:

private Long id; // primärschlüssel, zusammengesetzter PK ging in SQLiteDB irgendwie nicht
private TblMitarbeiter mitarbeiterid;
private TblAbrechnung abrechnungid
Das Problem hier war, dass ich beim Auslesen dieser Klassen einen StackOverflowError bekam.

Wenn ich Variablen dieser Klasse so definiere:

Code:
Auflöser-Klasse:

private Long id;
private Long mitarbeiterid;
private Long abrechnungid;
funktioniert alles einwandfrei. Scheinbar habe ich hier zu viele Objekte erzeugt und den Speicher überlaufen lassen.


Noch ein anderes Beispiel:

Code:
Mitarbeiter-Klasse:

private Long mitarbeiterid;
private String name;
private ArrayList<TblAbrechnung> alAbrechnung;
Hier möchte ich die Abrechnungen gleich in dem Mitarbeiter-Objekt vorhalten, wenn ich das Mitarbeiter-Objekt auslese.


Meine Fragen sind nun:

- Sollte man beim Entwickeln unter Android generell darauf verzichten, Objekte "in" Objekten zu definieren, wie in meinem ersten Beispiel?

- In meinem letzten Beispiel wollte ich, wenn ich die Mitarbeiter auslese, die Abrechnungen in einer ArrayListe gleich mitgeben. Sollte man darauf eher verzichten und lieber
die Abrechnungen jedes Mal neu auslesen, wenn sie gebraucht werden?

- Sollte man Listen und Sets generell eher sparsam verwenden, da dort ja mal locker mehrere hundert Objekte enthalten sein können, oder ist das trivial?

Schonmal Danke und viele Grüße
 
- Sollte man beim Entwickeln unter Android generell darauf verzichten, Objekte "in" Objekten zu definieren, wie in meinem ersten Beispiel?

ja, ein object zu erzeugen ist sehr teuer. wenn es dann veile davon gibt, wird das nicht wirklich brauchbar auf einem android gerät

Sollte man Listen und Sets generell eher sparsam verwenden, da dort ja mal locker mehrere hundert Objekte enthalten sein können, oder ist das trivial?

sparsam ist sicher das richtige wort. liegt immer in anwendungsfall, aber generell gilt, je weniger objekte man instanzieren muss, desto schneller. Listen und Sets benötigen auch einiges an Zeit und Speicher.
 
Jedoch sollte man eine "gesunde" Mischung finden... jetzt komplett auf seine ordentliche Struktur zu verzichten, halte ich für "blödsinn"... Lieber ein wenig mehr Leistung verballern, als unleserlichen Code zu erzeugen... Unteranderem sollte man sich die Performance optemierung nicht zu sehr ans Herz nehmen, da ca. jedes jahr nun 20 neue Phones auf den Markt kommen, die flotter und sparsammer sind ;) Also einfach "bedacht" auf die Performance schauen und gut ist =)
 
google hat ein paar tipps auf der developer seite, wenn man die beherzigt, dann macht man wohl das meiste richtig
 

Ähnliche Themen

A
Antworten
1
Aufrufe
584
swa00
swa00
M
  • MikelKatzengreis
Antworten
5
Aufrufe
132
swa00
swa00
SpeedySix
Antworten
13
Aufrufe
1.402
jogimuc
J
Zurück
Oben Unten