1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Service soll Activity benachrichtigen, wie?

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von tar, 08.03.2011.

  1. tar, 08.03.2011 #1
    tar

    tar Threadstarter Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    0
    Registriert seit:
    08.03.2011
    Hallo Leute!

    Ich schreibe gerade eine Anwendung, bei der ich eine Kommunikation zwischen Service und Activity benötige. Wenn die Activity den Service anspricht, ist das kein Problem. Ich möchte das jedoch umgekehrt umsetzen. Der Service kommuniziert periodisch mit einem Webserver und falls dabei ein bestimmtes Ereignis eintritt, soll der Service die Activity darueber benachrichtigen.

    Ich hatte jetzt vor, dass der Service einen Broadcast losschickt und die Activity von einem BroadcastReceiver benachrichtigt wird. Allerdings wird anscheinen bei jedem Broadcast eine neue Instanz des BroadcastReceivers gestartet (ist das wirklich so?), so dass der BroadcastReceiver nicht meine Activity ansprechen kann, weil ich sie ihm garnicht kenntlich machen kann.


    Habt ihr eine Idee wie man die Kommunikation Service zu Activity umsetzt?

    ~Tobias
     
  2. Unicate, 09.03.2011 #2
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Also eigentlich sollte nicht bei jedem Broadcast eine neue Instanz des Receivers erstellt werden. Wenn du das so gecoded hast, ist das ungünstig um nicht falsch zu sagen.

    Ich habe meine Service's immer per Callback mit den Activities kommunizieren lassen, das ging auch immer ganz gut.
     
  3. tar, 09.03.2011 #3
    tar

    tar Threadstarter Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    0
    Registriert seit:
    08.03.2011
    Danke fuer deine Antwort, auch wenn sie... hm... mich verwirrt.

    Mit welchem Callback ist das denn möglich oder hast du da vielleicht sogar ein Beispiel?


    ~Tobias
     
  4. Unicate, 09.03.2011 #4
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Im Moment hab ich mein Vorzeigebeispiel nicht hier. Den Callback musst du natürlich erst erstellen...

    Ich werde mal ein Tutorial dazu schreiben... nicht heute, aber demnächst.

    Man muss der AIDL Datei welche man für die Richtung Activity=>Service erstellt hat um 2 Methoden erweitern

    PHP:
    interface ServiceBinder {

        
    void registerCallback(ServiceCallback callback);
        
    void unregisterCallback();
        
    ....
    }
    und eine weitere AIDL für diesen ServiceCallback schreiben.

    Beim binden der Activity an den Service dann darauf achten, das man diese Methode aufruft und das implementierte Interface des Callbacks dann registriert (mit registerCallback aus deiner ServiceBinder.aidl)

    Dann kann man dieses interface im Service selbst verwenden und einfach aufrufen.

    Ich hoffe das war verständlich genug.
     
  5. tar, 09.03.2011 #5
    tar

    tar Threadstarter Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    0
    Registriert seit:
    08.03.2011
    Ok, ich hab AIDL mal kurz ueberflogen und ich glaube auch, dass es damit geht.

    Bin dann jedoch auf etwas anderes gestoßen, was meine urspruengliche Idee zum Laufen bringt. Und zwar war ja mein eigentliches Problem, dass bei jedem Broadcast eine neue Instanz des BroadcastReceivers gestartet wird. Dies ist aber nur so, falls man den Receiver ueber die Manifest-Datei registriert. Falls man das programmatisch ueber registerReceiver() macht, ist der Receiver fest an eine Activity gebunden.

    ~Tobias
     

Diese Seite empfehlen