ScheduledThreadPoolExecutor para una tarea periódica (usando Retrofit) simplemente disparando una vez y nunca más

Tengo el siguiente código para sondear el recuento de notificaciones no leídas cada X segundos desde un servidor

Comienzo este proceso a través de ScheduledThreadPoolExecutor en App.onCreate () y

Log.d("XXX", "Requesting Notification count from server ...");

se llama una vez (puedo ver en Logcat), pero no se llama a ninguna de las dos funciones de devolución de llamada de Retrofit (y, de hecho, no hay registros de depuración de Retrofit). Además, el "Solicitud de recuento de notificaciones del servidor ..." nunca se imprime nuevamente (es decir, la tarea periódica no se está ejecutando)

Estoy usando Retrofit para otras llamadas de servicio web también (a entrada del usuario) y están funcionando bien (puedo ver las solicitudes / respuestas entrantes y salientes en el logcat)

public class App extends Application  {



    private ScheduledExecutorService scheduleTaskExecutor;
    ...


    @Override
    public void onCreate() {
        super.onCreate();

        //region Set up the periodic notification count listener task


        scheduleTaskExecutor= Executors.newScheduledThreadPool(2);
        scheduleTaskExecutor.scheduleAtFixedRate(new PeriodicNotifCountFetchTask(), 0, 5, TimeUnit.SECONDS);

        //endregion
    }


    class PeriodicNotifCountFetchTask implements Runnable {

        @Override
        public void run() {
            Log.d("XXX", "Requesting Notification count from server ...");
            EMRestClient.getmEMRestService().getNotificationCount(new Callback<NotificationCount>() {
                @Override
                public void success(NotificationCount response, Response unused) {

                    int unreadNotifCount = response.getCount();

                    Log.d("XXX", "Successfully fetched notification count, unread = " + response.getCount());
                    if (unreadNotifCount>0){
                        // call listener to repaint menu
                        for (NewNotificationListener x :notifListeners){
                            x.onNewNotificationReceived(response.getCount());    
                        }
                    }
                }

                @Override
                public void failure(RetrofitError error) {
                    Log.d("XXX", "Failed to fetch notification count from server");
                }
            });

        }
    }


}
La parte de modificación del código está aquí:
    @POST("/notification/notification_count/")
    void getNotificationCount(Callback<NotificationCount> callback);

Respuestas a la pregunta(2)

Su respuesta a la pregunta