Handler und Threads

  • Hallo,


    ich habe folgendes Szenario:
    Ich empfange per Bluetooth Daten, verarbeite diese und speichere sie schließlich.
    Empfangen tue ich in einem extra Thread, dieser schickt die Daten dann per Handler an eine Klasse zum verarbeiten, welche dann die Daten zum speichern weitergibt, mit einer Singleton Implementierung des SQLiteHelper.


    Dabei packe ich die Daten immer in 50er Päckchen. Auf manchen Geräten stelle ich nun fest, dass die letzten 10 Werte aus einem Packet fehlen. Anschließend habe ich die Päckchengröße auf 100 erhöht. Das Ergebniss war, dass die letzten 60 Werte gefehlt haben. Daher würde ich sagen, dass das schreiben des Pakets in den Speicher irgendwann unterbrochen wird, nämlich dann, wenn das nächste Paket angekommen und verpackt ist.


    Liege ich da vollkommen falsch, weil der Handler für jeden Aufruf von handleMessage einen eigenen Thread startet, oder ist das möglich?


    Ich teste es heute Nacht mal mit einer niedrigeren Datenrate und hoffe, dort zu einem fehlerfreien Ergebnis zu kommen.

  • Ich persönlich würde das Ganze auf die 'Singleton Implementierung des SQLite Helper' schieben.
    In den seltensten Fällen sind eigene Singleton-Implementierungen thread-safe.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Sowas hatte ich mir auch schon gedacht. Ich hatte das ursprünglich implementiert, damit nicht mehrere Threads gleichzeitig Lesen und schreiben. Ich sehe nun den Fehler der Denkweise :D


    Ich habe eine statische Methode, welche entweder das Objekt des SQLiteHelper zurückgibt wenn es schon erstellt ist, oder es sonst neu erstellt und dann zurückgibt.


    Wie würdet ihr da jetzt vorgehen?


    Eine Array in dem SQLiteHelper, welche die Daten Stränge einzeln zwischenspeichert und dann einfach nur abarbeitet?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!