开发者

Why is this simple service not starting?

开发者 https://www.devze.com 2023-02-06 04:34 出处:网络
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 breakpoin

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
    pu开发者_StackOverflowblic void onStart(Intent intent, int startid) {

    }

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


Did you declare the service in AndroidManifest.xml?


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!


Hi the code you write is working fine. May be you forgot to add the following code in the manifest file before closing application tag.

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


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


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.


Very rare case scenario. But when wroking on multiprocess application the activity and the service need to have android:process mentioned in the Manifest.xml

EG: RemoteServiceBindingActivity.kt

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

Then

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


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

Didn't work. I had to add android:process=":test" to the service too in the Manifest like this:

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

精彩评论

暂无评论...
验证码 换一张
取 消