Domanda

Sto modificando il codice di un'app Android che sta effettuando chiamate GPS in un servizio.LocationListener.Utilizza anche ServiceConnection

In alcune viste il dispositivo decide che la mia applicazione sta impiegando troppo tempo per rispondere e che l'utente può "forzare chiudere" o "attendere".Prima di compare questo popup, l'applicazione è ancora utilizzabile dall'utente, possono scorrere, scorrere, premere i pulsanti ecc.

Sto solo supponendo che ciò sia correlato al servizio GPS in quanto è in esecuzione ogni volta che questo problema accade.

Ho sentito che questo problema ha a che fare con una filettatura in esecuzione sugli uithread, invece di un filo di sfondo.Ma ero sicuro che i servizi funzionino asincrono in thread del fondo.

intuizione apprezzata

È stato utile?

Soluzione

L'utilizzo di un servizio non ha necessariamente generato un nuovo thread, la chiamata di servizio viene eseguita sulla discarica del chiamante.Dal servizio API Android DOC AT: "Si noti che i servizi, come altri oggetti applicativi, funzionano nel thread principale del loro processo di hosting ..".

È possibile specificare il servizio da eseguire su un processo diverso, ma la migliore pratica è di generare un nuovo filo nel servizio.

Più su Android Service a: http://developer.android.com/reference/android/app/service.html

Altri suggerimenti

Ti consiglio vivamente di estendere Asynctask, consente un uso corretto e semplice della filettatura dell'interfaccia utente.Consente di eseguire operazioni di fondo e pubblicare i risultati sulla filettatura dell'interfaccia utente senza dover manipolare fili e / o gestori.Potresti voler effettuare tutto il calcolo nel metodo di doinbackground.BTW Forza Chiudi o attendere è un comportamento classico per questo tipo di problemi. Buona fortuna !!!

L'elaborazione in un servizio può ancora causare appendere l'applicazione.

La soluzione che dovresti guardare l'implementazione è quella di eseguire qualsiasi logica che potrebbe impantando la tua attività in un thread separato.Questo include cose come: aggiornamenti / inserimenti del database, comunicazione di rete e qualsiasi altro pezzo di codice a lungo termine.

L'asynctask è un metodo conveniente per questo, poiché è possibile manipolare l'interfaccia utente nella funzioni OnPreexecute e OnPostexecute.

È possibile implementare un asynctask direttamente nel tuo servizio come sottoclasse.

Happuly Questo aiuta! Saluti

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