App, die Daten per Bluetooth/Wifi austauscht

  • Hallo!
    Ich bin gerade dabei eine App zu entwickeln, die per Bluetooth bzw. Wifi Daten austauscht. Für den Datenaustausch benutze ich eine Bibliothek, die ich vorhatte in einem Service laufen zu lassen. Falls also die Verbindung abbricht, wird im Service als Erstes angestoßen und von dort aus der UI Thread angestoßen. (Hat jemand eine gute Seite für UI Thread im Service manipulieren?)


    Jedenfalls wollte ich nur wissen, ob das ein guter Ansatz ist oder ich es grundlegend anders machen soll.


    Danke!! ^^ ^^

  • Du kannst 'den UI Thread' nicht 'manipulieren'.
    Der Sinn von Threading ist, dass der eine Thread vom anderen Thread unabhängig ist. Er muss nicht einmal wissen, dass da ein anderer Thread existiert.
    Logisches Resultat: der eine Thread weiß überhaupt nicht, ob da ein anderer Thread existiert. Noch weniger kann er da irgend etwas manipulieren.


    Wie Du mit der UI interagieren kannst hängt in erster Linie davon ab, welche Art von Service Du implementierst.
    Wird der Service an die UI gebunden (beispielsweise bei einem Chat, einer Datenübertragung, einem Spiel, einer Fernsteuerung…), dann hat Dein Service gewisse Informationen über die UI und Du kannst die Mittel und Wege zur Interaktion bereit stellen.


    Läuft Dein Service hingegen ohne UI (Indoor-Navigation mit iBeacon oder WLAN, Profilwechsel via NFC, Loggen von WiFi/Bluetooth Qualität zur späteren Analyse), dann wird Dein Service unabhängig des UI gestartet und nach Beendigung seiner Arbeit gestoppt. Hier hat er absolut keine Informationen über irgendwelche UI-Elemente die irgendwas von ihm wollen und Du musst probate Mittel zur Kommunikation anbieten.


    Eine Mischung aus Callbacks zum Registrieren und ContentProvider zum Abfragen von Änderungen habe ich für einen solchen Fall als Ansatz gewählt.

    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!«

  • Du kannst 'den UI Thread' nicht 'manipulieren'.
    Der Sinn von Threading ist, dass der eine Thread vom anderen Thread unabhängig ist. Er muss nicht einmal wissen, dass da ein anderer Thread existiert.
    Logisches Resultat: der eine Thread weiß überhaupt nicht, ob da ein anderer Thread existiert. Noch weniger kann er da irgend etwas manipulieren.

    Ich habe mich vielleicht falsch ausgedrückt. Ich meinte wie stoße ich die UI an, wenn im Service irgendeine Aufgabe beendet wurde.


    Wie Du mit der UI interagieren kannst hängt in erster Linie davon ab, welche Art von Service Du implementierst.
    Wird der Service an die UI gebunden (beispielsweise bei einem Chat, einer Datenübertragung, einem Spiel, einer Fernsteuerung…), dann hat Dein Service gewisse Informationen über die UI und Du kannst die Mittel und Wege zur Interaktion bereit stellen.

    Ok. Was für Mittel genau stehen mir denn zur Verfügung, um Interaktion bereit zu stellen? Hier bin ich gerade und weiß nicht genau, wie ich das handhaben soll. Im Moment starte ich im Service einfach eine neue Activity, wenn eine "Nachricht" angekommen ist im Service.


    Läuft Dein Service hingegen ohne UI (Indoor-Navigation mit iBeacon oder WLAN, Profilwechsel via NFC, Loggen von WiFi/Bluetooth Qualität zur späteren Analyse), dann wird Dein Service unabhängig des UI gestartet und nach Beendigung seiner Arbeit gestoppt. Hier hat er absolut keine Informationen über irgendwelche UI-Elemente die irgendwas von ihm wollen und Du musst probate Mittel zur Kommunikation anbieten.

    Was meinst du mit probaten Mitteln?


    Danke für die Hilfe

  • Callbacks. (onServiceDidFinishSending(), onServiceDidFinishReceiving(), onServiceSentData(), onServiceReceivedData(), onServiceWillReceiveDataAmount(), onServiceWillSendDataAmount()…)


    Gepaart mit einem ContentProvider, der im Falle des passenden Callbacks die dazugehörigen Daten abrufen kann. (getReceivedFile() oder Ähnliches)

    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!«

  • Okay! Soweit verstanden.


    Ich hätte da noch ne Frage zum Service. Ich habe jetzt einen Service, der über Wlan/Bluetooth Nachrichten empfängt. (Und dann die Callbackmethoden anspricht). Allerdings wird die Service initial einmal erstellt und auch, wenn die App im Hintergrund läuft, habe ich den Service nicht entbunden (unbindService(..) nicht aufgerufen), damit er eben auch im OnPause Zustand im Prinzip weiterhin Nachrichten empfangen kann und dementsprechend reagieren kann. Allerdings habe ich jetzt ein Problem, dass der Service "unkontrolliert" im Hintergrund mitläuft und wenn ich die App ausmache, ist er auch noch an. Wie kann ich das Problem lösen?

Jetzt mitmachen!

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