Android IntentService се изпълнява само веднъж

Използвам Android AlarmManger, за да планирам изпълнение на IntentService след малки интервали.

Ето моят AlarmManger:

static void setNextSchedule(Context ctx, long interval){
        AlarmManager manager = (AlarmManager) ctx.getSystemService(Context.ALARM_SERVICE);
        Intent nIntent = new Intent(ctx, DService.class);
        PendingIntent pIntent = PendingIntent.getActivity(ctx, 1, nIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        manager.setRepeating(AlarmManager.ELAPSED_REALTIME, 
                SystemClock.elapsedRealtime() + interval, interval, pIntent);

        Log.i(ScheduleAlarm.class.getSimpleName(), "Next alarm set");
    }

И моят IntentService:

@Override
    protected void onHandleIntent(Intent intent) {
        Log.i(DService.class.getSimpleName(), "Service starting");

        ScheduleAlarm.setNextSchedule(getApplicationContext(), 15000);
    }

В момента той само съдържа код за тестване. Сега този код ще работи успешно без проблеми, след като приложението стартира, но след 15 секунди ще посочи, че услугата стартира в logcat, но кодът няма да се изпълни.

Как да накарам интернет услугата да изпълнява кода вътре в onHandleIntent всеки път, когато се изпълнява?

Благодаря


person Wahtever    schedule 08.02.2014    source източник
comment
но кодът няма да се изпълни -- какъв е кодът? Как решихте, че няма да се изпълни? Защо използвате getActivity() PendingIntent за Intent за клас с име DService?   -  person CommonsWare    schedule 08.02.2014
comment
@CommonsWare - Вие сте прав, променен на getService() и сега всичко работи добре. Добавете като отговор, ще приема. Благодаря ти   -  person Wahtever    schedule 08.02.2014


Отговори (1)


Когато използвате PendingIntent, фабричният метод трябва да съответства на типа компонент, за който е вашият Intent:

  • Ако вашето Intent сочи към дейност, използвайте getActivity()

  • Ако вашето Intent сочи към услуга, използвайте getService()

  • Ако вашето Intent сочи към BroadcastReceiver, използвайте getBroadcast()

  • Ако вашите Intent не сочат нито едно от горните, отидете директно в затвора, не пропускайте Go!, не събирайте $200 :-)

person CommonsWare    schedule 08.02.2014