Singleton / Context / Objekte retten

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

25.06.2011, 00:03:24 via Website

Hi,
ich stehe gerade einfach vor eine Wand und komme nicht weiter...
Was möchte ich machen:
Ich möchte ein Objekt ( in diesem Fall handelt es sich um ein Singleton) in meinen Activities (also im GUI Thread) und in einem Remote Service (also ein neuer Thread) nutzten.
Hole ich mir also in einer Activity ein Objekt aus dem Singelton und dann im remote Service ebenfalls erhalte ich zwei unterschiedliche Instanzen. Liegt wohl daran wie Android den GUI Thread und den remote Service verwaltet. Es werden dort wohl zwei Dalvik Vms instanziiert. Somit kann das Singleton an dieser Stelle nicht funktionieren.
Nimmt man sich nun aber SharedPreferences als Vorbild, kann ich mir über den Context, sowohl in den Actitvites und dem remote Service das entsprechende Objekt geben lassen. Nur habe ich beim API stöbern keine Technik gefunden selber Objekte in den Context zu schieben.

Folgendes Lösungen kommen nicht in Frage:
- Das Objekt zu serialisieren und dann immer wieder einlesen.
- Das Objekt in SharedPreferences zu schreiben und somit diese Technik zu missbrauchen.
- Das Objekte an den remote Service zu übergeben, da so die Änderungen am dem Objekt nicht im Service gestehen und somit das Singleton Pattern unnütz wäre.

Hat irgendjemand eine Idee ? Ich wäre für jeden Strohhalm dankbar, egal wie groß diese auch sein Mag :)

Gruß,
Markus

— geändert am 25.06.2011, 02:00:33

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

25.06.2011, 22:25:47 via Website

Sollte es jemanden interessieren:
Ich habe das Problem nun gelöst. Zwar nicht mit einem Singleton wie ich es mir zuerst gedacht habe.
Es funktioniert nun per ICP und somit über ADIL Interfaces. Es geht wohl nicht wirklich anders. What ever.
Wer sich die ganze Geschichte einmal anschauen möchte kann es sich aus dem Git-Repository auschecken.

Gruß,
Markus

Ansgar M

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

27.06.2011, 08:17:20 via Website

Markus B.
Es werden dort wohl zwei Dalvik Vms instanziiert. Somit kann das Singleton an dieser Stelle nicht funktionieren.
2 VMs wäre auf einem Mobilgerät recht teuer.
Für dieses Verhalten reichen aber auch schon separate Classloader.
Da die static-Variablen einer Klasse (z.B. instance im Singleton) logisch dem Classloader zugeordnet sind, der die Klasse geladen hat, sind sie für den jeweils anderen Classloader dann "null" und der Singleton erzeugt sich einen eigene Instanz.

— geändert am 27.06.2011, 08:18:40

Antworten