Esegui periodicamente una richiesta di richiamo mentre l'applicazione è inattiva

0

Ho un sito Web che supporta pienamente i dispositivi mobili, ma da quando l'apertura di una finestra del browser sembra eccessiva e alcune persone sono ossessionate dall'installazione di app, ora sto creando un'app per Android che è essenzialmente solo un browser all'interno di un'attività .

Ho pensato, lo sto creando comunque, quindi potrei fare un ulteriore passo avanti e abilitare l'app a notificare all'utente quando ci sono nuovi eventi che potrebbero riguardarli come nuove notifiche nel sito stesso.

Non ho mai sviluppato un'applicazione Android né ho mai lavorato con java, sono fondamentalmente googling e copia / incolla con piccole modifiche (conosco i miei modi per programmare, solo non java), il che mi ha fatto pensare due volte su come dovrei fare questo.

Fondamentalmente la mia idea è quando l'attività è chiusa (onStop) Avvierò un servizio che poi invierà una richiesta HTTP GET alla mia API site.com/notifications/countUnseen che restituisce semplicemente un intero, e se ce ne sono creare una nuova notifica Android per l'utente. Riprendendo l'attività (onStart), interromperò il servizio. Sono preoccupato principalmente del fatto che devo inviare una richiesta HTTP ogni, diciamo, 5 minuti e non sono veramente sicuro di come farlo. Quello che ho trovato è che potrei usare ScheduledThreadPoolExecutor suggerito in questa risposta dall'interno del servizio.

Pensi che ciò che ho pianificato sia una buona idea? Ho solo bisogno di una parola di conforto su questo, o meglio ancora un altro suggerimento se quello che ho è spazzatura, da qualcuno più esperto di me.

    
posta php_nub_qq 05.08.2015 - 11:34
fonte

2 risposte

1

Non è necessario lasciare il servizio in esecuzione per eseguire regolarmente il polling, e così facendo possono infastidire gli utenti, poiché consumano memoria senza una buona ragione.

Dovresti dare un'occhiata all'API di AlarmManager. Questo ha tre potenziali vantaggi:

  • può essere configurato per inviare un intent che avvia l'app in background anche se non è in esecuzione, il che significa che non è necessario sprecare memoria
  • può essere configurato per attendere fino a quando il dispositivo è attivo dopo il tempo selezionato, il che farà risparmiare energia
  • è in grado di raggruppare le notifiche con frequenza simile insieme, il che significa che se qualcuno dei tuoi utenti ha un altro processo che esegue il polling periodicamente i due accadrà contemporaneamente, risparmiando così potere.
risposta data 12.08.2015 - 10:14
fonte
1

Crea un runnable e chiamalo con il gestore usando il metodo postDelayed() nel tuo servizio.

private final Handler handler = new Handler();
private Runnable getResponceAfterInterval = new Runnable() {

        public void run() {

            try 
            {
                new RequestTask().execute("URL of your GET request"); //RequestTask() is a AsynchTask requesting and handling response

            } catch (Exception e) {

            }

            handler.postDelayed(this, 5000*60);

        }
    };

E nel metodo onStart () incolla queste righe.

handler.removeCallbacks(getResponceAfterInterval);
handler.post(getResponceAfterInterval);
    
risposta data 12.08.2015 - 07:25
fonte

Leggi altre domande sui tag