0

Die App, an der ich arbeite, animiert Kartenmarkierungen, nachdem sie mithilfe von ObjectAnimators dem Bildschirm hinzugefügt wurden. Die Animation ersetzt das Symbol durch progressiv größere oder kleinere Bitmaps. Ungefähr 20% der Zeit wird die Animation zufällig abgebrochen und nur teilweise vergrößert oder verkleinert. Ich weiß, dass es abgebrochen wird, weil a) die Animation nicht abgeschlossen ist und b) wenn ich eine AnimatorListener hinzufüge, dann wird onAnimationCancel() in diesen Zeiten aufgerufen.Warum werden meine Objektmarker ObjectAnimators abgebrochen?

Es scheint nicht zu Garbage Collection, zu anderen Pins (es kann passieren, wenn nur ein Pin auf dem Bildschirm platziert wird) zu anderen Code, der während der Animation ausgeführt wird, zu sein.

Sie sind nicht auf autoCancel eingestellt, und selbst wenn dies der Fall wäre, würde sie nicht ausgelöst, da mehrere identische Animationen nicht gestartet werden.

Irgendeine Idee überhaupt, warum das passieren würde? Hat jemand jemals gesehen, dass Animationen zufällig und unerwartet abgebrochen werden?

Antwort

0

Nun, ich fühle mich wie ein Idiot - ich erkannte endlich, warum dies geschah!

ObjectAnimators haben nur eine schwache Referenz auf ihr Zielobjekt.

Wenn Sie keinen separaten Verweis auf das Objekt erhalten, das in einer anderen Variablen animiert wird, wird manchmal vor der Beendigung der Animation ein Garbage Collection-Vorgang ausgeführt. Die nächste Iteration des ObjectAnimator wird versuchen, das Objekt zu aktualisieren, scheitert, weil das Zielobjekt null ist, und dann wird die Animation abgebrochen.

Die Lösung besteht also einfach darin, sicherzustellen, dass eine Variable auf dieses Objekt verweist, zumindest bis die Animation abgeschlossen ist.

Hoffe, dass dies hilft - ich bin mir sicher, dass ich nicht der einzige sein kann, der in dieses Problem geraten ist!

Verwandte Themen