Почему этот простой сервис не запускается? - PullRequest
59 голосов
/ 21 января 2011

У меня есть служба с обработчиком, который должен писать «Hello» в logcat каждые 5 секунд.Но он ничего не записывает в logcat ... Это похоже на то, что служба не выполняется, и я ставлю на нее точку останова, а режим отладки никогда не останавливается на точке останова.первое действие моего приложения, с этим:

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

Я уверен, что код startService выполняется, потому что он вызывается перед началом другого действия, и начинается другое действие.* Это код моего сервиса:

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

Ответы [ 5 ]

173 голосов
/ 21 января 2011

Вы объявили услугу в AndroidManifest.xml?

62 голосов
/ 25 июля 2012

Очень важно: правильно написать пространство имен , например:

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

в моем AndroidManifest.xml ранее это было (неверно):

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

Служба не запущена и нет сообщения об ошибке !

16 голосов
/ 21 января 2011

Привет код, который вы пишете, работает нормально.Может быть, вы забудете следующий код в файле манифеста перед закрытием тега приложения.

<application>
    ....
    <service android:name=".MyServiceNotifications"/>
</application>
8 голосов
/ 21 января 2011

Существуют также обстоятельства, когда вам нужно установить атрибут «enabled» в значение «true» при определении его в манифесте, например:

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

См. Эту ссылку для получения дополнительной информации: http://developer.android.com/guide/topics/manifest/service-element.html

1 голос
/ 10 мая 2016

Если вы используете Xamarin Droid, самый простой способ сделать это - пометить класс как службу:

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

Тогда нет необходимости помещать его в AndroidManifest.xml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...