Why is this simple service not starting?

2019-01-23 00:17发布

问题:

I have a service with a handler that has to write "Hello" in the logcat every 5 seconds. But it doesn't write nothing on the logcat... It's like the service is not executing, and I put a breakpoint on it and the debug mode never stops on the breakpoint.

I start the service, in the first activity of my app, with this:

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

I am sure that the code startService is executed because it is called before starting another activity, and the other activity starts.

This is the code of my 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");
    }    
}

回答1:

Did you declare the service in AndroidManifest.xml?



回答2:

Very important: write the name space correctly, for example:

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

in my AndroidManifest.xml previously it was (wrong):

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

No service started and no error message!



回答3:

Hi the code u write is working fine. May be u forget to the following code in manifest file before closing application tag.

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


回答4:

There are also circumstances where you need to put the "enabled" attribute to "true" when defining it in the manifest, like so:

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

See this link for more info: http://developer.android.com/guide/topics/manifest/service-element.html



回答5:

If using Xamarin Droid the easiest way to do this is to mark the class as a service like this:

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

Then there's no need to put it in the AndroidManifest.xml.