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:
Das Problem hier war, dass ich beim Auslesen dieser Klassen einen StackOverflowError bekam.
Wenn ich Variablen dieser Klasse so definiere:
funktioniert alles einwandfrei. Scheinbar habe ich hier zu viele Objekte erzeugt und den Speicher überlaufen lassen.
Noch ein anderes Beispiel:
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
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
Wenn ich Variablen dieser Klasse so definiere:
Code:
Auflöser-Klasse:
private Long id;
private Long mitarbeiterid;
private Long abrechnungid;
Noch ein anderes Beispiel:
Code:
Mitarbeiter-Klasse:
private Long mitarbeiterid;
private String name;
private ArrayList<TblAbrechnung> alAbrechnung;
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