globale Databaseconnection über mehrere Activities

  • Antworten:11
  • Bentwortet
mcfly
  • Forum-Beiträge: 286

19.05.2011, 17:05:55 via Website

Hallo zusammen

Wieder mal stehe ich vor einem Problem :-) Vielleicht hat mir jemand einen Tip ?

Ich habe mehrere Activities und in allen Activities Datenbankzugriffe auf immer die selbe Datenbank.
Wie kann ich irgendwie die DatabaseConnection einmal aufbauen und von allen Activities nutzen, ohne dass ich z.Bsp. mit Intents Daten von einer
Activity zur anderen übergebe ?

Grüsse

Antworten
mcfly
  • Forum-Beiträge: 286

19.05.2011, 17:34:38 via Website

Hallo zusammen

Habs grad per Zufall selber lösen können. Es gibt diverse Beiträge über globale Variablen und Singleton mit AndroidApps.
Ich habe also einen GlobaleVariable-Klasse gemacht mit Singleton Pattern.
Diese Klasse kann ich aus jeder Activity mit getInstance() holen.

Grüsse

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

19.05.2011, 17:38:55 via App

Danke,
sowas mit ner Globalen Variable hab ich schon immer mal gebraucht. Hab mir meinen "Ich auch" Post hier nur für später aufgehoben, um den Thread später zu pushen :grin:
Lg Ansgar

Antworten
Markus B.
  • Forum-Beiträge: 636

19.05.2011, 17:39:25 via Website

Hi,
schau dir mal dieses Beispiel an evtl. hilft es dir ja weiter.
Ich muss heute Abend mal schauen wie ich das bis jetzt gemacht habe und werde mich dann nochmal melden.

Gruß,
Markus

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

19.05.2011, 19:07:40 via App

Ah,
jetzt weiß ich wieder wofür "statische Instanzvariablen" gut waren.. Danke. Da hätte man auch selbst drauf kommen können.
Lg Ansgar
edit: Bei dem Link scheint es ja ohne dieses SingletonPattern zu klappen. Geht das auch bei Android? Oder sollte ich mir das SingletonPattern auch ansehen?

— geändert am 19.05.2011, 19:09:46

Antworten
Markus B.
  • Forum-Beiträge: 636

19.05.2011, 19:40:22 via App

Hi, jetzt wo ich mir das Beispiel so genau anschaue gefällt mir das gar nicht ... sry dafür. Ich würde es auf jeden Fall mit dem Singleton-Pattern machen und mir per Methode (getConnection oder so) eine Verbindung zur DB geben lassen.

Gruß,
Markus

Antworten
Gelöschter Account
  • Forum-Beiträge: 294

19.05.2011, 21:00:17 via Website

Darf ich auch meinen Senf abgeben?

Ich halte die Idee einer permanenten Datenbankverbindung für schlecht. Es gibt immer wieder Codeteile in einer normalen App die keine Datenbankverbindung benötigen. Man blockiert mit dieser Lösung auf einem schwachbrüstigen Device Ressourcen.

Gut, man muss bei jeder App immer wieder beide Lösungen gegenüberstellen. In dem einen Fall wird der Speicher (nicht nur die Klasse sondern auch die Datenbank-Engine) durch eine permanente Verbindung blockiert und im anderen Fall wird beim Öffnen und Schließen CPU Kraft benötigt. Ich persönlich halte im Moment den Speicher für kritischer als die CPUs. Auf der anderen Seite beginnt das System bei erhöhtem Speicherverbrauch mit dem Aufräumen - was dann auch wieder auf CPU und Akku geht. Kurz und knapp, die permanente Verbindung kostet m.E. immer mehr Kraft.

Activities werden vom System ja so lange am Leben gehalten wie es geht. Werden sie vom System abgeschossen dann existiert bereits ein Engpass. Dann sollte man auch schön im onDestroy aufräumen und nicht noch eine Datenbankverbindung krampfhaft offen halten.

Nur meine 0.02 Cent

Gruß
Harald

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

19.05.2011, 22:32:15 via App

Ich funk da mit meiner Verwendung dafür mal frech dazwischen, hoffe mal ihr erlaubt es. :grin:
Aber bei einer Verbindung per Bluetooth oder per Wifi an einen Port (weiß die Übertragungsart grad net) könnte man das so machen? Da wäre es halt wichtig, dass die Verbindung nicht gekappt wird..
Lg Ansgar

Antworten
Gelöschter Account
  • Forum-Beiträge: 294

19.05.2011, 22:44:30 via Website

Wie gesagt, kommt natürlich auch auf die App an. Der OP beschrieb aber ein typisches "mehrere-Activities-Szenario" und das würde ich nicht per se machen.

Gruß
Harald

Ansgar M

Antworten
Markus B.
  • Forum-Beiträge: 636

19.05.2011, 22:50:57 via Website

Huhu,
ich habe mir noch mal meinen code angeschaut und dort hole ich mir auch nur in den Activitys eine Connection wenn ich diese brauche.
Nach den Ausführungen von Harald macht das auch nur so Sinn :) Danke für deine Ausführung!

Ansgar ich muss gestehen das ich nicht so ganz verstehe was du mit "Da wäre es halt wichtig, dass die Verbindung nicht gekappt wird" meinst.
Du baust eine Verbindung via bluetooth / Wifi mit was / wie auf und fragst dann die DB ab ?!

Gruß,
Markus

— geändert am 19.05.2011, 22:51:10

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

19.05.2011, 23:56:13 via App

Nein,
ich brauchte nur dasselbe Grundgerüst (eine immer aktive Verbindung). Die Datenbank hat damit nichts Zutun.. :)
Deswegen auch eher Offtopic..
Lg Ansgar

Antworten
Markus B.
  • Forum-Beiträge: 636

20.05.2011, 09:14:06 via Website

Ansgar M
Nein,
ich brauchte nur dasselbe Grundgerüst (eine immer aktive Verbindung). Die Datenbank hat damit nichts Zutun.. :)
Deswegen auch eher Offtopic..
Lg Ansgar

Hi,
also irgendwie verstehe ich nicht was das Singleton mit einer immer aktiven Verbindung in Sachen Bluetooth oder Wifi zutun haben soll.
Diese resourcen werden doch von Android selbst verwaltet und über broadcastReceiver bekommst du Veränderungen mit (Wifi vorhanden und Verbindung aktiv, bluetooth-Verbindung hergestellt usw.). Willst du dir da was eigenes bauen oder so ?
Sorry wenn ich es irgendwie falsch verstehe oder so :)

Gruß,
Markus

Antworten