Question

Je modifie le code d'une application Android qui effectue des appels GPS dans un service.EmplacementListener.Il utilise également ServiceConnection

Dans certaines vues, l'appareil décide que mon application met trop de temps à répondre et que l'utilisateur peut soit « Forcer la fermeture » soit « Attendre ».Avant que cette fenêtre contextuelle n'apparaisse, l'application est toujours utilisable par l'utilisateur, il peut faire défiler, glisser, appuyer sur des boutons, etc.

Je suppose seulement que cela est lié au service GPS, car il fonctionne chaque fois que ce problème survient.

J'ai entendu dire que ce problème était lié à un thread exécuté sur UIthread, au lieu d'un thread en arrière-plan.Mais j'étais sûr que les services s'exécutaient de manière asynchrone dans le thread d'arrière-plan.

Aperçu apprécié

Était-ce utile?

La solution

L'utilisation d'un service ne génère pas nécessairement un nouveau thread, l'appel du service s'exécute sur son thread appelant.À partir de la documentation du service API Android à l'adresse :"Notez que les services, comme les autres objets d'application, s'exécutent dans le thread principal de leur processus d'hébergement.."

Vous pouvez spécifier le service à exécuter sur un processus différent, mais la meilleure pratique consiste à générer un nouveau thread dans le service.

En savoir plus sur le service Android sur :http://developer.android.com/reference/android/app/Service.html

Autres conseils

Je vous recommande vivement d'étendre AsyncTask, cela permet une utilisation correcte et facile du thread de l'interface utilisateur.Vous permet d'effectuer des opérations en arrière-plan et de publier les résultats sur le thread de l'interface utilisateur sans avoir à manipuler les threads et/ou les gestionnaires.Vous souhaiterez peut-être effectuer tous les calculs avec la méthode doInBackground.BTW Forcer la fermeture ou attendre est un comportement classique pour ce genre de problèmes.Bonne chance!!!

Le traitement dans un service peut toujours entraîner le blocage de votre application.

La solution que vous devriez envisager de mettre en œuvre consiste à exécuter toute logique susceptible de ralentir votre activité dans un thread séparé.Cela inclut des choses comme :Mises à jour/insertions de bases de données, communication réseau et tout autre morceau de code de longue durée.

L'AsyncTask est une méthode pratique pour cela car vous pouvez manipuler l'interface utilisateur dans les fonctions onPreExecute et onPostExecute.

Vous pouvez implémenter une AsyncTask directement dans votre service en tant que sous-classe.

J'espère que cela aide !Acclamations

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top