Warum startet dieser einfache Dienst nicht?

Lesezeit: 2 Minuten

Benutzer-Avatar
NullPointerException

Ich habe einen Dienst mit einem Handler, der alle 5 Sekunden “Hello” in den Logcat schreiben muss. Aber es schreibt nichts in den Logcat … Es ist, als würde der Dienst nicht ausgeführt, und ich setze einen Haltepunkt darauf und der Debug-Modus stoppt nie am Haltepunkt.

Ich starte den Dienst in der ersten Aktivität meiner App wie folgt:

startService(new Intent(GPSLoc.this, MyServiceNotifications.class)); //enciendo el service

Ich bin sicher, dass der Code startService wird ausgeführt, da sie vor dem Start einer anderen Aktivität aufgerufen wird und die andere Aktivität startet.

Dies ist der Code meines Dienstes:

public class MyServiceNotifications extends Service {

    boolean serviceStopped;

    private Handler mHandler;
    private Runnable updateRunnable = new Runnable() {
        @Override
        public void run() {
            if (serviceStopped == false)
            {
                createNotificationIcon();
            }
            queueRunnable();
        }
    };

    private void queueRunnable() {
        // 600000 : cada 10 minutos, comprueba si hay nuevas notificaciones y actualiza la
        // notification BAR
        mHandler.postDelayed(updateRunnable, 5000);

    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        serviceStopped = false;

        // //////////////////////////////////////MANEJADOR SIMILAR A UN HILO
        mHandler = new Handler();
        queueRunnable();
        // ///////////////////////////////////// FIN MANEJADOR
    }

    @Override
    public void onDestroy() {
        serviceStopped = true;
    }

    @Override
    public void onStart(Intent intent, int startid) {

    }

    public void createNotificationIcon()
    {
        Log.d("MyServiceNotifications", "Hello");
    }    
}

  • hast du den Dienst in der Manifest-Datei deklariert?

    – Franco

    21. Januar 2011 um 14:07 Uhr

  • Fügen Sie ein Logcat in onCreate() ein, wird das verwendet? Wann rufen Sie außerdem run() auf updateRunnable auf? Ich kann mir nicht vorstellen, dass das hingerichtet wird

    – Jimmy

    21. Januar 2011 um 14:08 Uhr

  • ohh wahr, ich verzeihe, dass ich das maNIFEST reingesteckt habe!! Danke

    – NullPointerException

    21. Januar 2011 um 14:14 Uhr

  • Eine weitere Sache, die Sie überprüfen sollten, ist, ob Ihr Dienst NICHT bereits läuft. In diesem Fall müssen Sie den Dienst beenden und neu starten.

    – Nikola Kosmajac

    4. Dezember 2019 um 9:31 Uhr

Benutzer-Avatar
Franco

Hast du den Dienst deklariert in AndroidManifest.xml?

  • Wow, ich fühle mich jetzt dumm 🙂 Ich bin überrascht, dass kein Fehler protokolliert wird, wenn dies passiert, wie es bei Aktivitäten der Fall ist.

    – Ross Hambrick

    17. September 2014 um 16:10 Uhr

  • Das Keuchen, das man macht, wenn man merkt, dass man etwas so Einfaches vergessen hat, besonders nachdem man den Code stundenlang auf und ab gescrollt hat … lol.

    – der Anonyme

    17. Oktober 2015 um 19:25 Uhr

  • Es muss auch im Abschnitt deklariert werden. Frag mich nicht, wie ich das herausgefunden habe….

    – Eric Engel

    1. Juli 2017 um 17:04 Uhr

  • …. Wie von VenkaReddy beantwortet.

    – Tayyab Mazhar

    16. März 2019 um 7:58 Uhr

Benutzer-Avatar
Seraphims

Sehr wichtig: Schreiben Sie die Namensraum richtig, zum Beispiel:

<service android:name="com.example.data.synchronization.SynchronizationService"/>

in meinem AndroidManifest.xml vorher war es (falsch):

<service android:name="com.example.data.SynchronizationService"/>

Kein Dienst gestartet und keine Fehlermeldung!

  • Diese Lösung hat mir wirklich sehr geholfen!

    – Marcos1490

    31. Januar 2013 um 19:40 Uhr

  • Es war mir peinlich, es zuzugeben, aber ich verbrachte eine Stunde damit, mich mit Dingen zu beschäftigen, bevor mir klar wurde, dass dies auch für mich das Problem war.

    – Jared

    27. Juni 2013 um 17:39 Uhr

  • Vielleicht wird Android Studio mehr Wert darauf legen, diese Art von Problemen zu erkennen …

    – Seraphims

    27. Juni 2013 um 18:55 Uhr

  • @Jared gleich hier Kumpel

    – Paresh Dudhat

    14. Juli 2014 um 17:43 Uhr

  • @Jared Nur neugierig, verwendest du Android Studio oder Eclipse? Kompilierst du mit Gradle?

    – Seraphims

    14. Juli 2014 um 20:48 Uhr

Benutzer-Avatar
VenkaReddy

Hallo, der Code, den Sie schreiben, funktioniert einwandfrei. Möglicherweise haben Sie vergessen, den folgenden Code in die Manifestdatei einzufügen, bevor Sie das Anwendungs-Tag schließen.

<application>
    ....
    <service android:name=".MyServiceNotifications"/>
</application>

  • Meine Stimme ist für “vor dem Schließen des Anwendungs-Tags”. Programmierer machen dumme Fehler!

    – Tejasvi-Hecke

    8. September 2015 um 6:52 Uhr

  • Dies wird angezeigt, wenn Sie Analyze…Inspect Code im Manifest ausführen.

    – Merk

    24. Mai 2016 um 18:42 Uhr

Es gibt auch Umstände, in denen Sie das Attribut “enabled” auf “true” setzen müssen, wenn Sie es im Manifest definieren, wie folgt:

<service android:enabled="true" android:name=".MyServiceNotifications" />

Unter diesem Link finden Sie weitere Informationen: http://developer.android.com/guide/topics/manifest/service-element.html

Wenn Sie Xamarin Droid verwenden, können Sie dies am einfachsten tun, indem Sie die Klasse wie folgt als Dienst markieren:

[Service]
public class LongRunningTaskService : Service
{
    ...
}

Dann muss es nicht in die AndroidManifest.xml eingefügt werden.

Benutzer-Avatar
Saran Sankaran

Sehr seltenes Szenario. Aber wenn Sie an einer Multiprozessanwendung arbeiten, müssen die Aktivität und der Dienst vorhanden sein android:process erwähnt in der Manifest.xml

ZB: RemoteServiceBindingActivity.kt

startService(Intent(this, RemoteService::class.java))

Dann

<activity
    android:name=".RemoteServiceBindingActivity"
    android:process=":test" />


<service
    android:name=".RemoteService"
    android:enabled="true"/>

Hat nicht funktioniert. musste ich hinzufügen android:process=":test" zum Dienst auch im Manifest wie folgt:

<service
    android:name=".RemoteService"
    android:enabled="true"
    android:process=":test"/>

1252820cookie-checkWarum startet dieser einfache Dienst nicht?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy