it-swarm.com.de

Warum startet dieser einfache Dienst nicht?

Ich habe einen Dienst mit einem Handler, der alle 5 Sekunden "Hallo" im Logcat schreiben muss. Es schreibt jedoch nichts auf dem Logcat ... Es ist, als würde der Dienst nicht ausgeführt, und ich habe einen Haltepunkt darauf gesetzt, und der Debug-Modus stoppt nie am Haltepunkt.

Ich starte den Dienst in der ersten Aktivität meiner App folgendermaßen:

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

Ich bin sicher, dass der Code startService ausgeführt wird, weil er aufgerufen wird, bevor eine andere Aktivität gestartet wird und die andere Aktivität gestartet wird.

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");
    }    
}
58

Haben Sie den Dienst in AndroidManifest.xml angegeben?

172
Franco

Sehr wichtig: schreibe den Namensraum richtig, zum Beispiel:

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

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

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

Kein Dienst gestartet und keine Fehlermeldung !

61
Seraphim's

Hallo der Code, den Sie schreiben, funktioniert gut. Möglicherweise vergessen Sie den folgenden Code in der Manifestdatei, bevor Sie das Anwendungs-Tag schließen.

<application>
    ....
    <service Android:name=".MyServiceNotifications"/>
</application>
14
VenkaReddy

Es gibt auch Situationen, in denen Sie das Attribut "enabled" auf "true" setzen müssen, wenn Sie es im Manifest definieren.

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

Siehe diesen Link für weitere Informationen: http://developer.Android.com/guide/topics/manifest/service-element.html

8
dbm

Wenn Sie Xamarin Droid verwenden, ist es am einfachsten, die Klasse als einen Dienst wie folgt zu kennzeichnen:

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

Dann müssen Sie es nicht in die AndroidManifest.xml einfügen.

1
noelicus