Concernant l 'article que j'ai écrit l'autre jour, j'ai utilisé LocationManager pour obtenir les informations de localisation. À ce moment-là, la vitesse lente est devenue un problème, je vais donc écrire un article sur la façon dont je pourrais l'améliorer.
python
private void callRequestLocationUpdates()
{
checkPermission();
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 1, listener);
}
J'ai utilisé LocationManager.requestLocationUpdates () pour obtenir les informations de localisation sur Android, mais au début, je l'ai implémentée comme ci-dessus. Cependant, il semble y avoir une méthode autre que le GPS pour acquérir des informations de localisation avec LocationManager, et j'ai trouvé qu'elle est contrôlée par le premier argument de requestLocationUpdates (). Il semble que le premier argument s'appelle "propider", mais si vous vous référez à la documentation décrite dans la référence, vous pouvez voir qu'il y a environ 3 constantes avec le nom "PROVIDER".
・ GPS_PROVIDER · FOURNISSEUR DE RÉSEAU ・ PASSIVE_PROVIDER
Étant donné qu'un seul FOURNISSEUR peut être défini dans l'argument de requestLocationUpdates (), j'ai pensé que je devais sélectionner l'un des trois ci-dessus au début, mais en fait, dans LocationManager, requestLocationUpdates () est défini dans les trois PROVIDER ci-dessus. Il est également possible de fonctionner en parallèle.
Pour l'exécution parallèle de requestLocationUpdates (), je me suis référé au site décrit pour référence (développement Android | Comment obtenir des informations de localisation en parallèle avec plusieurs fournisseurs). Il y avait la description suivante.
Il est transmis à requestLocationUpdatesde pour démarrer la mesure, mais si vous l'appelez pour le fournisseur requis, la mesure sera effectuée en parallèle.
De plus, il y avait la description suivante.
Si tous les fournisseurs utilisent le même écouteur, removeUpdates arrêtera de mesurer pour tous les fournisseurs une fois appelés.
Oh! c'est! J'ai pensé. En d'autres termes, je pensais que si vous le tournez avec une instruction for et laissez tout PROVIDER effectuer un traitement parallèle, et si vous pouvez d'abord acquérir les informations de position, puis effectuer un traitement ultérieur, vous pouvez vous attendre à une vitesse plus élevée pour l'ensemble de l'application!
Et le code qui a été amélioré en se référant au site ci-dessus est le suivant.
python
private void callRequestLocationUpdates()
{
//Viser une vitesse élevée en tournant le traitement avec plusieurs fournisseurs
List<String> providers = mLocationManager.getProviders(true);
checkPermission();
for (String provider : providers) {
mLocationManager.requestLocationUpdates(provider, 500, 1, listener);
}
}
LocationListener. Est implémenté.
@Override
public synchronized void onLocationChanged(Location location) {
//Acquisition des informations de localisation
lat = location.getLatitude();
lng = location.getLongitude();
if(getActiveFlg() == 0){
//Définissez un indicateur dans le premier processus afin qu'il ne soit pas exécuté après le deuxième processus
setActiveFlg(1);
//Traitement ultérieur
doSomething(lat, lng);
}
}
Avec cela, le traitement suivant sera déclenché uniquement par onLocationChanged () qui a été démarré en premier, et il ne sera pas déclenché à partir de la deuxième fois. Si vous ajoutez également synchronisé, vous pouvez être assuré qu'aucun autre thread n'interrompra l'instruction if avant setActiveFlg (1).
En conséquence, le traitement ultérieur ne peut être effectué qu'avec PROVIDER, qui a pu acquérir les informations de position à la vitesse la plus rapide, et par conséquent, l'acquisition d'informations de position pourrait être accélérée.
référence: Obtenir les informations de localisation Android LocationManager Développement Android | Comment obtenir des informations de localisation en parallèle avec plusieurs fournisseurs
Recommended Posts