German Oberfläche arbeitet sehr langsam

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
Hallo,

ich bekomme vom Ethernet Gerät ununterbrochen die Daten gesendet
B4X:
Sub AStreams_NewData (Buffer() As Byte)
Dim msg As String
    msg = BytesToString(Buffer, 0, Buffer.Length, "Windows-1252")
      
    Dim msg_trennen() As String = Regex.Split("\|",msg)
Parse1 = msg_trennen(1).Trim
Parse2 = msg_trennen(2).Trim
Parse3 = msg_trennen(3).Trim
Parse4 = msg_trennen(4).Trim
Sleep(0)
CallSub(Input_Output, "DatenLesen")
End Sub
und übergebe auch einiges an die Oberfläche bzw. auf eine Avtivity.
Nun, dadurch das die Daten sehr schnell sind, und die Oberfläche ständig aktualisiert werden muss, arbeitet der Scrollview sehr langsam als wie zuvor.

Wer kennt da eine Abhilfe?
 

DonManfred

Expert
Licensed User
Longtime User
Du solltest Dir WIRKLICH angewöhnen Testprojekte hochzuladen die dein Problem zeigen.
Wenn die daten so schnell kommen dann solltest Du sie evtl. sammeln und in einem Timer die Daten dann verarbeiten (first in, first out prinzip) und die aktivity dann z.b. nur alle 250ms (4x in der Sekunde) aktualisieren.

Android ist kein reatime OS. Android ist Eventbasiert. Es wird dir nicht möglich sein, eine Activity 100 mal (oder gar mehr) in der Sekunde zu aktualisieren.
Hört sich für mich nach einem Problem in deiner Struktur (Programmflow) an.

Wie oft aktualisierst Du die Activity in der Sekunde??
 

pucki

Active Member
Licensed User
Longtime User
Ist ein allgemeines Problem bei Sprachen wie Basic. Ist in VB nicht viel anders.
Ich mache es da so :


B4X:
dim Wert (100)
dim i as Integer
dim lauf as boolean

i = 0
lauf = true
  do while Lauf = true
    do while i < 100 ' eine Art Timer die angibt wie oft die aktualisiere werden soll.
      i= i +1
      wert(i) = daten ' hier die Daten sammeln
  loop
  ' aktualisiere Anzeige
 ' in VB mit My.Application.DoEvents  ob es ein ähnliche Befehl in B4a gibt weiß ich nicht. In VB zwingt dieser Befehl das Programm die Anzeigen zu aktualisieren.
  i = 0
loop

Ich hoffe dir eine Lösung gezeigt zu haben. Mein Code ist nicht verfeinert, aber in VB schreibe ich diese Variante jedes mal wenn der Benutzer wissen muss, ob sein Programm noch lebt. Gewisse Datenbank-Operationen etc. dauern halt was länger. ;)

Gruß

Pucki
 
Top