Sprungmarkierungen auf Android Maps API v2

9

Ich sehe Markierungen auf der Karte von Android Maps API v2, selbst wenn in der App nichts passiert.

Hier ist ein Video des Verhaltens:

Ссылка

Was ich erwarte

Marker sollten bei ihrem ursprünglich hinzugefügten lat / long stationär bleiben.

Mit welchen Schritten wird das Problem reproduziert?

    1. Erstellen, installieren und starten Sie das v2.0.6-Tag von OneBusAway:
      • a. %Code%
      • b. %Code%
      • c. %Code%
      • d. %Code%
    1. Navigieren Sie zu einer beliebigen unterstützten Stadt (z. B. Seattle oder Tampa) und beobachten Sie, wie die grünen Haltestellenmarkierungen auf der Karte umherspringen

Ich sollte hinzufügen, dass ich das nicht immer reproduzieren kann. Es scheint, als ob alles eine Zeit lang gut funktioniert, aber wenn die Marker anfangen herum zu springen hören sie nicht auf.

Details zur Markerimplementierung

Der Code, der die Symbole für die 9 Marker-Typen (8 Richtungen + keine Richtung) lädt, ist hier: Ссылка

Ich verwende dieses Zeichen: Ссылка

... was eine Anzahl von Formen ist - dies erzeugt den grünen Hauptkreis mit der weißen Kontur und den Drop Shadoes. Dann zeichne ich den Richtungspfeil oben für jede der 8 Richtungen - Code zum Zeichnen Richtungen ist hier:

Ссылка

Im Code, um die Symbole zu laden, ich bin das Caching des git clone https://github.com/OneBusAway/onebusaway-android.git von git checkout v2.0.6 zurück für jede der 9 Symbol Typen auf dem ersten Last, so ist dies nicht jedes Mal, wenn eine Markierung auf der Karte gesetzt wird getan .

Ich sah auch den Absturz der App zu "Leider hat OneBusAway gestoppt." und habe diese Ausnahme in Logcat gesehen, nachdem ich die App für einige Minuten auf dem Kartenbildschirm liegen ließ:

%Vor%

Ich habe das auf einem LG G4 und Nexus 6 gesehen. Weitere Details zu LG-Gerät finden Sie unten.

  • LG G4 LS991 mit Android 5.1 (LS991ZV4)

  • Google Play Services-Clientbibliothek Version = gradlew installObaGoogleDebug und adb shell am start -n com.joulespersecond.seattlebusbot/org.onebusaway.android.ui.HomeActivity

  • Version der Google Play-Dienste auf dem Gerät - Google Play Services 7.8.99 (2134222-440)

  • Android SDK-Version: BitmapDescriptor

Dieses Problem hat nicht immer existiert, was mich glauben lässt, dass es bei einem Update auf Android Google Play Services / Maps irgendwann eingeführt wurde.

Ich habe ein Problem dafür auf gmaps-api-issues, aber keine Antwort von diesem Beitrag geöffnet:

Ссылка

Hat jemand anderes das gesehen? Irgendwelche Ideen für Korrekturen?

BEARBEITEN

Ich sollte hinzufügen, dass ich das nicht immer reproduzieren kann. Es scheint, als ob alles eine Zeit lang gut funktioniert, aber wenn die Marker anfangen herum zu springen hören sie nicht auf.

BEARBEITEN 2

Ich habe hier auf Github ein kleineres Demo-Projekt erstellt, das dieselbe Marker-Implementierung verwendet:

Ссылка

Allerdings habe ich dort noch nicht das gleiche Problem gesehen.

EDIT 3

Ich habe Caching geändert BitmapDescriptorFactory.fromBitmap() anstatt compile 'com.google.android.gms:play-services-maps:7.5.0' in Ссылка .

Wir werden sehen, ob das das Problem behebt. Es ist intermittierend, also werde ich es nur wissen, wenn ich das Problem für einige Zeit nicht mehr sehe.

EDIT 4

Ich sehe immer noch das Problem, es sieht also so aus, als hätte ich den Cache% cc_de% auf compile 'com.google.android.gms:play-services-maps:7.8.0' umgestellt und auf compileSdkVersion 21 buildToolsVersion "21.1.2" umgestellt, hatte keinen Effekt.

EDIT 5

Ich bin mir nicht sicher, ob das zusammenhängt, aber ich sehe in Logcat auch die folgende Ausgabe:

  

09-01 10: 46: 00.339 9278-9278 /? E / libEGL: validate_display: 255 Fehler 3008 (EGL_BAD_DISPLAY)   09-01 10: 46: 00.339 9278-9278 /? E / libEGL: validate_display: 255 Fehler 3008 (EGL_BAD_DISPLAY)

und

  

9-01 10: 46: 00.069 9278-9278 /? W / ResourcesManager: Der Assetpfad '/system/framework/com.google.android.maps.jar' existiert nicht oder enthält keine Ressourcen.

und

  

09-01 10: 46: 16.019 1137-4311 /? W / ActivityManager: Planen des Neustarts des abgestürzten Dienstes com.google.android.gms / .usagereporting.service.UsageReportingService in 1000ms   09-01 10: 46: 16.019 1137-4311 /? W / ActivityManager: Planung des Neustarts des abgestürzten Dienstes com.google.android.gms / .icing.service.IndexService in 11000ms

und

  

09-01 10: 48: 38.609 5402-26676 /? E / SQLiteDatabase: Fehler beim Einfügen context_name = 8 end_time = 1441118918490 context_family = 7 module_id = com.google.android.contextmanager.module.PowerConnectionModule version = 1 sync_state_mod_time_millis = 1441118918532 start_time = 1441118643058 sync_state = 0 context_id = 9680c4f4-789a-4d86-acbf- 43d2098e89b8 Zeittyp = 3 proto_blob = [B @ 28265a3       android.database.sqlite.SQLiteConstraintException: UNIQUE-Einschränkung ist fehlgeschlagen: context.context_id (code 2067)               bei android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId (native Methode)               bei android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId (SQLiteConnection.java:790)               bei android.database.sqlite.SQLiteSession.executeForLastInsertedRowId (SQLiteSession.java:926)               bei android.database.sqlite.SQLiteStatement.executeInsert (SQLiteStatement.java:86)               bei android.database.sqlite.SQLiteDatabase.insertWithOnConflict (SQLiteDatabase.java:1581)               bei android.database.sqlite.SQLiteDatabase.insert (SQLiteDatabase.java:1451)               unter com.google.android.contextmanager.q.ak.a (Quelldatei: 405)               unter com.google.android.contextmanager.q.ak.b (Quelldatei: 380)               unter com.google.android.contextmanager.q.ak.a (Quelldatei: 346)               unter com.google.android.contextmanager.q.ak.b (Quelldatei: 373)               unter com.google.android.contextmanager.g.a.j.a (Quelldatei: 58)               unter com.google.android.contextmanager.g.a.a.run (Quelldatei: 52)               unter com.google.android.contextmanager.g.i.handleMessage (Quelldatei: 214)               bei android.os.Handler.dispatchMessage (Handler.java:102)               bei android.os.Looper.loop (Looper.java:135)               bei android.os.HandlerThread.run (HandlerThread.java:61)

EDIT 6 Ich habe dieses Problem in letzter Zeit nicht gesehen und festgestellt, dass die Google Play-Dienste auf dem LG G4-Gerät auf Bitmaps gestoßen sind. Also, vielleicht wurde es mit einem Update der Google Play-Dienste behoben? Ich melde mich später erneut.

EDIT 7 Ich habe das wieder in BitmapDescriptors und BitmapDescriptors gesehen, obwohl es nicht annähernd so schlecht aussieht wie früher (d. H. Weniger Marker springen herum und das Springen ist weniger bemerkbar). Es scheint hauptsächlich ausgelöst zu werden, wenn die App wieder gestartet wird, wenn sie eine Weile im Hintergrund war. Wenn ich die App abbringe und sie dann neu starte, verschwindet das Problem.

EDIT 8 Ich habe einen Weg gefunden, dies konsistent zu reproduzieren - siehe: Ссылка

Vom obigen Problem:

  
  1. Erstellen, installieren und starten Sie das v2.0.6-Tag von OneBusAway:

         

    a. Git Klon Ссылка

         

    b. git checkout v2.0.6

         

    c. gradlew installObaGoogleDebug

         

    d. ADB-Shell ist Start -n com.joulespersecond.seattlebusbot / org.onebusaway.android.ui.HomeActivity

  2.   
  3. Halten Sie das Gerät im Hochformat

  4.   
  5. Wenn Sie nicht in Seattle oder Tampa (oder in einer der unterstützten Regionen) wohnen, müssen Sie zu "Einstellungen- & gt; Ihre Region" gehen und die Region manuell festlegen. Scrollen Sie danach durch die Karte zu der Region (oder wählen Sie "Nimm mich hin", wenn Sie dazu aufgefordert werden).
  6.   
  7. Tippen Sie auf eine Bushaltestelle auf der Karte
  8.   
  9. Tippen Sie auf die 3 Punkte "mehr" Taste neben der Ankunftszeit (oder tippen Sie auf Ankunft in der Liste im Schiebefenster)
  10.   
  11. Tippen Sie auf die Option "Route auf der Karte anzeigen"
  12.   
  13. Nachdem die Route auf der Karte geladen wurde, ändern Sie die Geräteausrichtung in Querformat.
  14.   
  15. Beobachten Sie die Markierungen, nachdem die Karte neu geladen wurde
  16.   

Vollständige Videoaufnahme auf LG G4, die neue Schritte zur Erstellung und Ausgabe von: Ссылка

    
Sean Barbeau 28.08.2015, 17:23
quelle

1 Antwort

2

Ich denke, das hängt definitiv mit mehreren Instanzen von SupportMapFragment zusammen, die gleichzeitig existieren. In v2.0.6 Ich habe Fragmente nicht korrekt behandelt, wenn die Aktivität mit einem savedInstanceState zerstört und neu erstellt wurde (d. H. Wenn die Aktivität nach einer Weile im Hintergrund oder bei einer Orientierungsänderung abgebrochen wurde).

In v2.0.6 sah mein Code ungefähr so ​​aus:

%Vor%

Also habe ich eine Instanz von BaseMapFragment (die SupportMapFragment erweitert) in diesen Fällen verloren - eine Instanz existierte bereits in FragmentManager , aber ich hatte keine lokale Referenz darauf. Dieses Problem ist mir aufgefallen, als Menüpunkte der Aktionsleiste für ein anderes Fragment, das ich ähnlich gehandhabt habe, dupliziert wurden.

Ich habe den Code so geändert, dass er so aussieht, als ob die FragmentManager eine bestehende BaseMapFragment hat:

%Vor%

Der UI-Fluss hat sich im Master-Zweig geändert (ich öffne keine neue Aktivität mehr, um die Route anzuzeigen), sodass ich dort nicht direkt testen kann, ob das Problem nach dieser Codeänderung noch reproduzierbar ist.

>

Allerdings habe ich diesen Zweig erstellt, der vom Master abzweigt, aber den gleichen UI-Fluss wie in Version 2.0.6 hat und den obigen Fix für das Fragmentleck enthält:

Ссылка

Nach einem kurzen Test mit dieser Verzweigung scheint es, als ob die Fragmente bei der Orientierungsänderung korrekt behandelt wurden (dh das Fragment wurde nicht geleert) kann das Problem mit den Sprungmarken behoben haben - zumindest mit den obigen Schritten Es reproduziert nicht mehr auf einem LG G4 mit Android 5.1.

    
Sean Barbeau 11.12.2015, 15:36
quelle