Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Apps mit timer im Hintergrund lauft nicht korrekt. (https://www.delphipraxis.net/201105-apps-mit-timer-im-hintergrund-lauft-nicht-korrekt.html)

Anakond 24. Jun 2019 10:11

Delphi-Version: 10.2 Tokyo

Apps mit timer im Hintergrund lauft nicht korrekt.
 
Guten Morgen,

Ich benutze Firemonkey 10.2 und erfasse die Sensordaten (MotionSensor1.Sensor.AccelerationX)
in einem Zeitintervall, um die Daten zu Analysieren, um die später auf dem Ändroid Smartphone
Bildschirm anzeigen zu lassen.

Mein Problem ist, wenn der Benutzer das Gerät am USB-Kabel angeschlossen lässt
funktioniert alles einwandfrei.

Wenn das Gerät jedoch für eine Weile vom Stromnetz getrennt wird und der Bildschirm ausgeschaltet,
das Gerät wechselt in den Schlafmodus!

Dies schränkt den Zugriff auf die Anwendung ein und die abgelaufene Zeit ist nicht mehr korrekt.

Wie kann ich dieses Problem beheben?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
   FDateTimeTo := now;
   iSecToken := 0;
   Timer1.Interval := 1000 ;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
 h, m, s : integer;
begin
      inc( iSecToken );

      h := iSecToken div 3600 ;
      m := iSecToken mod 3600 div 60 ;
      s :=  iSecToken mod 3600 mod 60 ;

      if s <> sOld :=
      begin
         sOld := s;
         AccX := MotionSensor1.Sensor.AccelerationX;
      end;

      if m <> mOld :=
      begin
         mOld := m;
         DrawAccX;
      end;

     Label1.text :=  Format('%2d:%2.2d:%2.2d', [h, m, s]);

end;

Es wäre gut die Daten jede Sekunde oder alle 10 Sekunden zu erfassen,
aber wenn nicht, ich würde auch ein Intervall von je Minute akzeptieren.

Welche Beispiel können Sie mir vorschlagen,
sehr vielen Dank für Ihre Hilfe.

mkinzler 24. Jun 2019 10:15

AW: Apps mit timer im Hintergrund lauft nicht korrekt.
 
Dazu musst Du einen Dienst implementieren. Delphi bringt hierfür auch Beispiele mit.

Anakond 24. Jun 2019 10:50

AW: Apps mit timer im Hintergrund lauft nicht korrekt.
 
Danke für deine Antwort, muss ich einen Dienst benutzen ... ?,
genügt es nicht die Apps gestartet zu lassen ?

Hast du ein link oder ein Delphi Beispiele zu deinem Vorschlag.
Sehr vielen Dank für deine Hilfe.

philipp.hofmann 24. Jun 2019 10:52

AW: Apps mit timer im Hintergrund lauft nicht korrekt.
 
Liste der Anhänge anzeigen (Anzahl: 1)
Mit angehängter Unit kannst Du verhindern, dass das Android-Device in den Wake-Modus geht und somit die App aktiv bleibt.
Delphi-Quellcode:
    if (activate) then
      Acquire_PARTIAL_WAKE_LOCK
    else
      ReleaseWakeLock;
Dies macht aber nur Sinn, wenn die App nur in einem begrenzten Zeitraum läuft und nicht rund um die Uhr.
Mit einem Dienst, wie von Markus vergeschlagen, wirst Du das Thema ressourcen-schonender umgesetzt bekommen, dass ist die saubere Lösung und v.a. die Rund-um-die-Uhr-Variante.

mkinzler 24. Jun 2019 11:10

AW: Apps mit timer im Hintergrund lauft nicht korrekt.
 
Zitat:

Zitat von Anakond (Beitrag 1435228)
Danke für deine Antwort, muss ich einen Dienst benutzen ... ?,
genügt es nicht die Apps gestartet zu lassen ?

Hast du ein link oder ein Delphi Beispiele zu deinem Vorschlag.
Sehr vielen Dank für deine Hilfe.

Wie oben geschrieben, beinhaltet Delphi Beipiele für Dienste.

<LW>:\Users\Public\Documents\Embarcadero\Studio\20 .0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services

http://docwiki.embarcadero.com/RADSt...droid_Services

Anakond 24. Jun 2019 11:40

AW: Apps mit timer im Hintergrund lauft nicht korrekt.
 
Sehr vielen Dank für die Infos, ich werden das alles testen.

Anakond 11. Sep 2019 09:58

AW: Apps mit timer im Hintergrund lauft nicht korrekt.
 
Guten Morgen,

Zitat:

Zitat von philipp.hofmann (Beitrag 1435229)
Mit angehängter Unit kannst Du verhindern, dass das Android-Device in den Wake-Modus geht und somit die App aktiv bleibt.


Ich habe das Beispiel vom philipp.hofmann eingesetzt und es funktioniert so weit auf ältere Android Version sehr gut.

Wenn ich die Apps auf eine (Samsung S8) Android Version 9 installiere, funktioniert diese Prozedur nicht, die Apps fällt trotzdem im Schlafmodus.

Ich benutze im Delphi diese Eigenschaften:

Delphi 10.2
SDK Version 24.3.3 32 bit
SDK API Level ..\platforms\android-26
NDK android-ndk-r9c
NDK API ..\platforms\android-14
Java jdk1.8.0_60

Ich habe jetzt diese SDK Version installiert
SDK Version 26.1.1 32 bit
SDK API Level ..\platforms\android-28

und es funktioniert trotzdem nicht.

Was kann ich tun oder ändern, dass die Apps auf Android Version 9 nicht im Schlafmodus fällt.
Bin sehr dankbar für jede Hilfe.

peterbelow 13. Sep 2019 16:38

AW: Apps mit timer im Hintergrund lauft nicht korrekt.
 
Zitat:

Zitat von Anakond (Beitrag 1435224)
Guten Morgen,

Ich benutze Firemonkey 10.2 und erfasse die Sensordaten (MotionSensor1.Sensor.AccelerationX)
in einem Zeitintervall, um die Daten zu Analysieren, um die später auf dem Ändroid Smartphone
Bildschirm anzeigen zu lassen.

Mein Problem ist, wenn der Benutzer das Gerät am USB-Kabel angeschlossen lässt
funktioniert alles einwandfrei.

Wenn das Gerät jedoch für eine Weile vom Stromnetz getrennt wird und der Bildschirm ausgeschaltet,
das Gerät wechselt in den Schlafmodus!

Dies schränkt den Zugriff auf die Anwendung ein und die abgelaufene Zeit ist nicht mehr korrekt.

Wie kann ich dieses Problem beheben?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
   FDateTimeTo := now;
   iSecToken := 0;
   Timer1.Interval := 1000 ;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
 h, m, s : integer;
begin
      inc( iSecToken );

      h := iSecToken div 3600 ;
      m := iSecToken mod 3600 div 60 ;
      s :=  iSecToken mod 3600 mod 60 ;

      if s <> sOld :=
      begin
         sOld := s;
         AccX := MotionSensor1.Sensor.AccelerationX;
      end;

      if m <> mOld :=
      begin
         mOld := m;
         DrawAccX;
      end;

     Label1.text :=  Format('%2d:%2.2d:%2.2d', [h, m, s]);

end;

Es wäre gut die Daten jede Sekunde oder alle 10 Sekunden zu erfassen,
aber wenn nicht, ich würde auch ein Intervall von je Minute akzeptieren.

Welche Beispiel können Sie mir vorschlagen,
sehr vielen Dank für Ihre Hilfe.

Timer sind nicht dafür geeignet, einen Zeitraum exakt zu tracken, wie Du das versuchst. Es ist nie garantiert, das der Timer auch immer exakt in den Intervall-Abständen "tickt". Hol Dir einfach im OnTimer-Event die aktuelle Zeit vom OS anstelle die Ticxks zu zählen.

Anakond 16. Sep 2019 08:34

AW: Apps mit timer im Hintergrund lauft nicht korrekt.
 
Der Zeitraum muss nicht exakt sein, also es kann eine Zeitverzögerung von 1 oder 10 Sekunden haben.
Das Problem ist eigentlich, dass die Apps im Schlafmodus geht und der Timer antwortet nicht zeitweise 5 bis 10 Minuten.

Danke für weitere Vorschläge.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz