Gui effizient updaten

  • Antworten:8
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 9

19.01.2016, 13:28:14 via Website

Hallo zusammen,

ich habe folgendes Problem: Ich möchte Sensorwerte aufnehmen lassen und dabei einen Fortschrittsbalken
anzeigen lassen, wie lange die Aufnahme noch geht.

Meine jetzige Lösung ist, das ich eine Klasse habe die die Sensoren aussliest und die Gui verwaltet und eine zweite
Klasse, die ein Thread ist. Diesen Thread starte ich am Anfang und schicke ihn in eine Endlosschleife bis ein neuer
Sensorwert reinkommt und unterbreche dann die Endlosschleife, update über runOnUiThread(...) die Gui und schicke
ihn wieder in eine Endlosschleife.

Die Frage ist jetzt, ist das ganze effizient so gelöst, oder gäbe es noch eine schnellere Methode, die Gui zu updaten?
Habe etwas bedenken, dass der Thread in der Endlosschleife das Programm ausbremst...

Antworten
  • Forum-Beiträge: 605

19.01.2016, 13:34:37 via Website

Ich verstehe es glaube ich nicht ganz...

Wenn du die Schleife stoppen willst, sobald ein Sensor-Wert eingelesen wird, hast du ja auch die Möglichkeit, die GUI immer dann zu Updaten, ohne die Schleife, oder wo für ist die Schleife?
Um welchen Sensor handelt es sich?

Thomas Prantl

Antworten
  • Forum-Beiträge: 9

19.01.2016, 13:43:20 via Website

Es handelt sich um das Accelerometer.

Der Thread mit der Schleife ist dafür da, dass sich der Fortschrittsbalken im Sekundentat erhöht und
die Gui "anklickbar" bleibt, weil man die Messung auch abbrechen können soll.

Vereinfacht sieht die Schleife in der run-Methode vom Thread so aus:

public void run
--while(true)
----while(aufnahmeLäuft)
------Fortschritsbalken aktualisieren

— geändert am 19.01.2016, 13:44:09

Antworten
  • Forum-Beiträge: 9

19.01.2016, 13:48:15 via Website

Die Messung soll 10 Sekunden dauern.
Was genau meinst du mit Timer? - ich hab das über eine Variable die ich hochzähl gelöst und lasse den Thread dan schlafen zwischendurch

int count =0

public void run()
---while(true)
------while(aufnahmeLäuft)
--------update Fortschrittsbalken
--------count=count+1
--------Thread.sleep(1000)

— geändert am 19.01.2016, 13:49:02

Antworten
  • Forum-Beiträge: 605

19.01.2016, 13:51:32 via Website

Okey, ja so geht es auch. Das mit dem "Thread.sleep" hattest du oben nicht geschrieben. So kann man es natürlich machen.

Aber wenn es sich hier nur um einen 10 Sekunden langen Zeitraum handelt, in der die Schleife ja auch nur 10 mal durchlaufen wird, sollte es hier nicht zu Performance-Problemen kommen.

Thomas Prantl

Antworten
  • Forum-Beiträge: 9

19.01.2016, 14:01:40 via Website

Ich kenn mich damit noch nicht so gut aus, also bremst der Thread wenn er in
der Endlosschleife ist nicht meine App aus oder?

Weil auf meinem htc s desire ruckelt es ganz schön, auf meinem htc one m8
dagegen gar nicht....

Und ist es, wie ich es gemacht habe, der "standart-weg" so ein problem zu lösen
oder würde es noch anders gehen?

Antworten
  • Forum-Beiträge: 605

19.01.2016, 14:07:00 via Website

Es gibt immer viele Wege ans Ziel, sicher auch hier.

Ich hätte es hier, da es nur ein kurzer Zeitraum ist, genau so gemacht. Alles andere müsste ich auch googlen.

Thomas Prantl

Antworten

Empfohlene Artikel