lokalen Service starten und an Variable binden

  • Hi!


    Ich spiele schon seit einigen Wochen mit Android herum und wollte jetzt mal meine erste "richtige" App schreiben, die evt. was sinnvolles tut :D
    Dabei muss ich einen Service im Hintergrund laufen haben, der ein paar Sachen tut - jedoch will der nicht so wirklich laufen. Ich habe einen eigenen Netzwerkmanager geschrieben, der eine Verbindung mit einem Server aufbaut. Dieser "NetworkManager" implementiert einen Service und soll als Service laufen. Nur leider will meine Activity den Service irgendwie nicht starten:





    Das Problem ist nun folgendes: bindService(..) wird korrekt von der Activity gestartet, jedoch ist danach die Variable networkManager immernoch null. Ich habe mal versucht in die onCreate()-Methode vom NetworkManager zu debuggen, jedoch wird die anscheinend gar nicht aufgerufen, zumindest greift der Breakpoint an der Stelle nicht. Habe ich vielleicht irgendwas dummes in der AndroidManifest.xml vergessen oder so?


    EDIT: Ersten kleinen Fehler gefunden: <uses-permission android:name="android.permission.INTERNET"></uses-permission> fehlte in der AndroidManifest. Leider bleibt das Problem bestehen.

  • Hallo Pille,


    hab gestern ähnliche Sachen für mein Projekt ausprobiert und folgendes festgestellt:


    Der Aufruf von bindService legt zwar die Verbindung an, aber weil der Ablauf beim Starten eines Service etwas komplizierter ist, dauert es noch etwas, bis der Service "oben" ist.


    Du kannst auf den Service erst zugreifen, wenn die Activity vollständig gestartet ist - im Service gibt es beispielsweise noch einen Callback onActivityStarted().


    Versuche doch einmal, deine Methode checkForNewPackages() über einen onClickListener von der Oberfläche zu starten, dann ist die Activity mit allem erst mal fertig und der Service kommt mit seinen "Restarbeiten" auch endlich zum Zuge (der Emulator hat nur eine CPU).


    Vielleicht hilft dir auch die Darstellung in der Android-Doku.


    Und schau dir mal an, ob startForeground() für den Service etwas bringt - ich hab das aber noch nicht probiert.


    LG
    Uwe

  • Hi!


    Ich war mir zwar bewusst, dass das System etwas braucht um einen Service zu erstellen etc, aber irgendwie bin ich wohl davon ausgegangen, dass bindService() solange blockiert, bis der Service bereit ist. Dem ist aber offensichtlich nicht so. Danke für den Tipp, ich habe gerade mal den Aufruf checkForNewPackages() recht brutal in onServiceConnected() gepackt und siehe da es funktioniert. (Mir ist klar, dass man das unter Umständen schlechter Stil ist, aber zum Testen war das jetzt erstmal ausreichend)
    Und plötzlich greifen auch die Breakpoints :)


    Wahrscheinlich wäre mir das auch gar nicht so sehr aufgefallen, wenn ich nicht eine möglichst einfache TestApp für den NetworkManager geschrieben hätte. Hätte ich diesen direkt in einer "richtigen" App verwand, hätte ich wahrscheinlich vor dem eigentlich Zugriff auf den NetworkManager noch so viel zu tun gehabt, dass Android alles brav im Hintergrund gemacht hätte. So weiss ich aber nun wenigstens was ungefähr im Hintergrund abläuft.


    Gruß
    Pille

Jetzt mitmachen!

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