Zwei Prozesse gleichzeitig - UI Thread laggt

  • Hallo liebes Forum,

    heute wende ich mich wieder mit einem Thema was mich erneut sehr beschäftigt und ich das halbe Internet durchforstet habe um eine Lösung zu finden – leider ohne Erfolg. ||
    Ich habe eine ProgressBar und eine ImageView in meinem Activity-Layout. Die ImageView hat als Source eine <animation-list>. Ich habe einen Thread und Handler erstellt und lasse im Handler die Aktualisierungen des UI-Threads (Animation vom ImageView und ProgressBar-Fortschritt) ausgeben.
    Wenn ich beides hintereinander ausgebe, läuft alles flüssig. Lasse ich allerdings beides gleichzeitig ausführen, so fängt es an zu laggen. Was ich aber leider nicht verstehe…

    Ich kann gerne den Quellcode bei Bedarf einfügen.

    Liebe Grüße und vielen Dank im Voraus! :)
    Steven

  • Genau! Also ich habe zwei Threads. Einmal für das ImageView und einen für die ProgessBar. Die Threads senden immer an die (2x) Handler, weil diese ja nur UI Updates durchführen kann, soweit ich weiß.

  • versuche die beiden thread so zu synchronisieren das immer einer nach dem anderen im wechsel über seinen handler auf den ui thread zugreift.

    Uh. Ich bin noch ziemlicher Anfänger. Ich wüsste jetzt nicht, wie ich dieses umsetzen würde. Ist die Methode "synchronized" nicht für sowas gedacht oder bin ich da komplett aufm falschen Dampfer? Ich glaube mit Quellcode ist es vielleicht einfacher zu interpretieren.

  • Hi bin mir da auch nicht so ganz sicher. Ob das mit dem synchronized (this) richtig ist ? Hast du es mal ohne probiert?
    eigentlich sind es zwei unabhänige Threads. Denn daduch wartetet der eine Thread auf den anderen. Werde es mir noch mal in rughe anschauen.

  • So wie das da steht dürfte nix passieren. Allerdings auch nicht das, was du willst. Denn in jedem Thread erstellst du ein neues Handler Objekt.
    Somit greifen die Threads auch nicht auf das gleiche Objekt zu.
    Du müsstest das Handler Objekt außerhalb der Threads erstellen und jedem von diesem eine Referenz darauf zuweisen.

    Kann Spuren von persönlicher Meinung, Sarkasmus und Lakritz enthalten. Einzelne Wörter nicht für den Verzehr geeignet. Ungelesen mindestens haltbar bis: suche bei Google

  • Hallo Fischkralle du hast recht mit dem synchronized (this) hat eigentlich keine bedeutung. Da es zwei verschiedene Objekte sind (tihs) sind. Somit findet auch keine richtige Synconisation statt.

  • Erstmal vielen Dank für die vielen Antworten! :) Ich schaue gleich mal und probiere aus. :)

    Hat sich wohl leichter geschrieben als es ist. Ich habe viel rumexperementiert und habe es nicht lösen können. Habe auch probiert beiden Threads den selben Handler zu geben, funktionierte aber leide auch nicht :(

  • Hallo habe mir die Sache nochmal angeschaut. Bei der ProgressBar machst Du die Zeit intensiven Sachen gar nicht im Thread.
    aus dem Thread schickst du nur eine Nachricht an den Handler. Die ProgressBar läuft somit im Ui Thread. Ich habe das mit zwei ProgressBars so gelöst.

    Deine animationDrawable.start(); Führst du auch im Handler aus und somit auch im UI und nicht im Thread aus.

    Um es anzupassen währe der Code deiner animationDrawable.start(); funktion gut.
    Hoffe das Hilft weiter.
    ps. Deine progressbar läuft nicht komplett im ui thread denn dein CountDownTimer ist eigentlich schon ein eigener thread das macht Android für dich.

    Einmal editiert, zuletzt von nono124 (18. Juli 2017 um 21:35)

  • Hallo habe mir die Sache nochmal angeschaut. Bei der ProgressBar machst Du die Zeit intensiven Sachen gar nicht im Thread.
    aus dem Thread schickst du nur eine Nachricht an den Handler. Die ProgressBar läuft somit im Ui Thread. Ich habe das mit zwei ProgressBars so gelöst.

    Deine animationDrawable.start(); Führst du auch im Handler aus und somit auch im UI und nicht im Thread aus.

    Um es anzupassen währe der Code deiner animationDrawable.start(); funktion gut.
    Hoffe das Hilft weiter.
    ps. Deine progressbar läuft nicht komplett im ui thread denn dein CountDownTimer ist eigentlich schon ein eigener thread das macht Android für dich.

    Vielen Dank für den Quellcode! Momentan ist es bei mir zeitlich sehr eng. Ich melde mich, wenn ich das mal so probiert habe. Klingt aber plausibel, so wie es jetzt ist! :) Dankeschön!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!