Unterschied zwischen zwei Funktionen / warum laggt es?

  • 4 Antworten
  • Neuester Beitrag
Diskutiere Unterschied zwischen zwei Funktionen / warum laggt es? im Android App Entwicklung im Bereich Betriebssysteme & Apps.
R

Ronschk

Neues Mitglied
Hallo zusammen,
ich habe in meiner App nach einem Vorbild aus dem Internet eine Animation implementiert. Diese besteht aus zwei Funktionen, welche ich gerne zu einer zusammenfassen will. Das klappt soweit auch, allerdings laggt die Animation wenn ich meine Methode aufrufe (die Implementierung mit zwei Funktionen tut es nicht).
Das hier sind die beiden Funktionen
Code:
public void animateCircleMovement(final long duration) {

  // ...

  post(new Runnable() {
    @Override
    public void run() {
        animateStep();
    }
 });
}

public void animateStep() {

   // ...

  invalidate();
  if(curTime<endTime) {
    post(new Runnable() {
      @Override
      public void run() {
        animateStep();
      }
     });
  }
}
Das ist die einzelne
Code:
// ...
new Thread(new Runnable() {
  @Override
  public void run() {

  while(currTime<endTime){

  // ...

   postInvalidate();
 }
}).start();
Die Berechnung die zwischendrin gemacht werden sind ziemlich einfach und einander sehr ähnlich. Das sollte also mMn nicht zum lag führen.
Hat jemand ne Ahnung woran es liegt?

Danke :)
 
Jaiel

Jaiel

Experte
1. Code : Auf dem UI thread und blockt ihn einzig für das Zeichnen(rekursiv ncoh dazu!!!!)
2. Code : ausserhalb des UI Thread, zeitpunkt des neuzeichnens nicht bestimmbar
 
R

Ronschk

Neues Mitglied
Danke für die schnelle Antwort.
Deiner Antwort entnehme ich, dass die zweite Methode wahrscheinlich grunsätzlich besser ist. Nur wie kann ich das Problem mit dem Laggen beheben? Also wie kann ich ein Neuzeichnen erzwingen?
 
R

Ronschk

Neues Mitglied
Okay, habe ne Lösung gefunden: Es hilft zwischendurch (z.B. vor dem jeweiligen postInvalidate()) Thread.Sleep(10) aufzurufen, damit läuft es komplett flüssig
 
Jaiel

Jaiel

Experte
Views gefällt es nicht so oft invalidate zu bekommen und deswegen stoppt es einige und fährt einen Gang langsamer (meine was von 100ms gelesen zu haben)

Beim ersten hatte es gar keine Chance etwas anderes zu machen da es nur für deine Zeichen aufrufe geblockt war beim zweiten konnte es sich jedoch entscheiden ob sie deine Methode ausführt oder nicht :)