[JAVA] Beschleunigen Sie die Erfassung von Standortinformationen unter Android

Überblick

In Bezug auf den Artikel, den ich neulich geschrieben habe, habe ich LocationManager verwendet, um die Standortinformationen abzurufen. Zu dieser Zeit wurde langsame Geschwindigkeit zu einem Problem, daher werde ich einen Artikel darüber schreiben, wie ich es verbessern könnte.

Die erste Implementierung

python



private void callRequestLocationUpdates()
{
    checkPermission();
    mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 1, listener);
}

Ich habe LocationManager.requestLocationUpdates () verwendet, um die Standortinformationen auf Android abzurufen, aber zuerst habe ich sie wie oben implementiert. Es scheint jedoch eine andere Methode als GPS zu geben, um Standortinformationen mit LocationManager zu erfassen, und ich habe festgestellt, dass diese durch das erste Argument von requestLocationUpdates () gesteuert werden. Es scheint, dass das erste Argument "propider" heißt, aber wenn Sie sich auf die in der Referenz beschriebenen Dokumente beziehen, können Sie sehen, dass es ungefähr 3 Konstanten mit dem Namen "PROVIDER" gibt.

・ GPS_PROVIDER · INTERNET ANBIETER ・ PASSIVE_PROVIDER

Da im Argument von requestLocationUpdates () nur ein PROVIDER festgelegt werden kann, dachte ich, dass ich zuerst einen der oben genannten drei auswählen musste, aber tatsächlich ist in LocationManager requestLocationUpdates () in den obigen drei PROVIDER festgelegt. Es ist auch möglich, parallel zu laufen.

Verbesserte Implementierung

Für die parallele Ausführung von requestLocationUpdates () habe ich auf die als Referenz beschriebene Site verwiesen (Android-Entwicklung | So erhalten Sie Standortinformationen parallel zu mehreren Anbietern). Es gab die folgende Beschreibung.

Es wird an requestLocationUpdatesde übergeben, um die Messung zu starten. Wenn Sie dies jedoch für den gewünschten Anbieter aufrufen, wird die Messung parallel durchgeführt.

Zusätzlich gab es die folgende Beschreibung.

Wenn alle Anbieter denselben Listener verwenden, beendet removeUpdates die Messung für alle Anbieter, sobald diese aufgerufen wurden.

Oh! das ist! Ich dachte. Mit anderen Worten, ich dachte, wenn Sie es mit einer for-Anweisung drehen und alle ANBIETER parallel verarbeiten lassen und wenn Sie zuerst die Positionsinformationen erfassen und dann die nachfolgende Verarbeitung durchführen können, können Sie eine höhere Geschwindigkeit für die gesamte Anwendung erwarten!

Der Code, der durch Verweisen auf die obige Site verbessert wurde, lautet wie folgt.

python


private void callRequestLocationUpdates()
{
    //Streben nach hoher Geschwindigkeit durch rotierende Verarbeitung mit mehreren Anbietern
    List<String> providers = mLocationManager.getProviders(true);
    checkPermission();
    for (String provider : providers) {
        mLocationManager.requestLocationUpdates(provider, 500, 1, listener);
    }
}

LocationListener.onLocationChanged () wird aufgerufen, wenn die Standortinformationen von requestLocationUpdates () abgerufen werden können. Da jedoch eine parallele Verarbeitung durchgeführt wird, ist es ein Problem, wenn die nachfolgende Verarbeitung mehrmals aufgerufen wird. Ist implementiert.


@Override
public synchronized void onLocationChanged(Location location) {
    //Erfassung von Standortinformationen
    lat = location.getLatitude();
    lng = location.getLongitude();
    if(getActiveFlg() == 0){
        //Setzen Sie im ersten Prozess ein Flag, damit es nach dem zweiten Prozess nicht ausgeführt wird
        setActiveFlg(1);
        //Nachbearbeitung
        doSomething(lat, lng);
    }
}

Damit wird die nachfolgende Verarbeitung nur von onLocationChanged () ausgelöst, das zuerst gestartet wurde, und ab dem zweiten Mal nicht mehr. Wenn Sie auch synchronisiert hinzufügen, können Sie sicher sein, dass kein anderer Thread die if-Anweisung vor setActiveFlg (1) unterbricht.

Infolgedessen kann eine nachfolgende Verarbeitung nur mit PROVIDER durchgeführt werden, der in der Lage war, die Positionsinformationen mit der schnellsten Geschwindigkeit zu erfassen, und infolgedessen konnte die Erfassung von Positionsinformationen beschleunigt werden.

Referenz: Informationen zum Android-Standort abrufen LocationManager Android-Entwicklung | So erhalten Sie Standortinformationen parallel zu mehreren Anbietern

Recommended Posts

Beschleunigen Sie die Erfassung von Standortinformationen unter Android
[Android] Hinweise zu XML
Holen Sie sich Android-Standortinformationen
Passen Sie die Listenansicht auf Android an
Mehrteilige Übertragungsbibliothek auf Android
Verwenden Sie die serielle Kommunikation unter Android
ROS App Entwicklung auf Android
Richten Sie Gitolite unter CentOS 7 ein
Ubuntu unter Windows Build-Geschwindigkeit
Verwenden Sie nativen Code unter Android
Richten Sie ansible-playbook unter Ubuntu 20.04 ein