Domanda

Ho un'applicazione che deve " sondare " un servizio web per vedere se l'utente ha nuovi messaggi in attesa. Non ho alcun controllo sul servizio web, quindi non posso passare a un "push" meccanismo, sono bloccato facendo una richiesta ogni X numero di secondi per vedere cosa è disponibile.

Sto usando un System.Threading.Timer per fare la richiesta ogni tanto, ma sto riscontrando alcuni problemi. Il più grande è che smette di funzionare quando il telefono viene inviato in " standby " modalità (schermo spento, ma ancora in grado di ricevere chiamate e notifiche e-mail / txt).

Mi piacerebbe davvero che si comportasse come altre applicazioni in background. Cosa posso fare per farlo funzionare senza consumare troppo la batteria?

È stato utile?

Soluzione

Odio rispondere alla mia domanda, ma mi è stato indicato this , che è stato in grado di eseguire anche quando il dispositivo è in modalità di sospensione. Sembra che funzioni perfettamente.

Altri suggerimenti

Non c'è niente che tu possa fare, AFAIK. La modalità standby ha lo scopo di sospendere il processore per risparmiare energia e non è possibile eseguire il codice se il processore non è in esecuzione. Ci sono cose che la tua applicazione può fare per impedire al dispositivo di entrare in modalità standby, ma questo non è assolutamente consigliabile.

Sì. Simile a come ha risposto MusiGenesis, non sarai in grado di fare molto senza mantenere il dispositivo attivo e funzionante. Simile a come alcuni telefoni notificheranno che "Gioco / App in esecuzione" e quindi la batteria viene schiaffeggiata.

Che ne dici di scrivere un'interfaccia dal tuo telefono per sfruttare la messaggistica di testo (che funziona ancora) e far sì che invii un messaggio di testo al servizio web? Sarebbe possibile? Immagino che anche questo tipo di metodo potrebbe smettere di funzionare, ma immagino sia un pensiero?

Non sono sicuro del framework compatto, ma in Win32 c'è WaitableTimer che può riattivare il computer dallo standby. Prende alcune chiamate native anche se non esiste un wrapper in .Net.

Anche se non puoi modificare il servizio web, potresti essere in grado di aggiungere un secondo " ombra " servizio web tra i tuoi clienti e il servizio web originale. Il servizio Web ombra potrebbe eseguire il polling del servizio Web originale e quindi "spingere". tutto ciò che scopre ai PDA.

Penso che potresti comunque avere lo stesso problema. Non ho mai fatto " push " da un servizio Web, ma penso che sia sostanzialmente implementato facendo in modo che il client effettui una chiamata iniziale a un metodo del servizio Web che porta un delegato a un metodo nel client, a cui il servizio Web si blocca. Quando il servizio web deve spingere qualcosa, chiama quel delegato. Se nel frattempo il client è entrato in modalità standby, il tentativo di chiamare il delegato dal server fallirà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top