web-dev-qa-db-fra.com

Pourquoi ce service simple ne démarre-t-il pas?

J'ai un service avec un gestionnaire qui doit écrire "Bonjour" dans le logcat toutes les 5 secondes. Mais il n’écrit rien sur le logcat ... c’est comme si le service ne s’exécutait pas, et j’ai mis un point d’arrêt dessus et le mode débogage ne s’arrête jamais sur le point d’arrêt.

Je lance le service, dans la première activité de mon application, avec ceci:

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

Je suis sûr que le code startService est exécuté car il est appelé avant de commencer une autre activité et l'autre activité commence.

C'est le code de mon service:

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

Avez-vous déclaré le service dans AndroidManifest.xml?

172
Franco

Très important: écrivez correctement l'espace nom, par exemple:

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

dans mon AndroidManifest.xml précédemment c'était (faux):

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

Aucun service démarré et aucun message d'erreur!

61
Seraphim's

Bonjour, le code que vous écrivez fonctionne bien. Peut-être que vous oubliez le code suivant dans le fichier manifeste avant de fermer la balise d’application.

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

Il existe également des circonstances dans lesquelles vous devez attribuer la valeur "true" à l'attribut "enabled", comme suit:

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

Voir ce lien pour plus d’informations: http://developer.Android.com/guide/topics/manifest/service-element.html

8
dbm

Si vous utilisez Xamarin Droid, le moyen le plus simple consiste à marquer la classe en tant que service comme ceci:

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

Ensuite, il n'est pas nécessaire de le mettre dans le fichier AndroidManifest.xml.

1
noelicus