AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Android App "Reagiert nicht mehr, Warten oder Beenden"?

Android App "Reagiert nicht mehr, Warten oder Beenden"?

Ein Thema von sko1 · begonnen am 16. Mai 2017 · letzter Beitrag vom 19. Mai 2017
Antwort Antwort
sko1

Registriert seit: 27. Jan 2017
207 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Android App "Reagiert nicht mehr, Warten oder Beenden"?

  Alt 16. Mai 2017, 14:47
Hallo,

bei einer sehr langen Datenbank-Operation (kann auch mal 5 Minuten benötigen) kommt irgendwann von Android obige Meldung, obwohl ich immer wieder in der Datenbank-Abarbeitungsschleife Application.ProcessMessages aufrufe.

Muss man unter Android dem Betriebssystem irgendwie anders mitteilen, dass man "noch am Leben" ist?

Ciao
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.286 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Android App "Reagiert nicht mehr, Warten oder Beenden"?

  Alt 16. Mai 2017, 14:53
http://blog.marcocantu.com/blog/2014...d_threads.html
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
207 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: Android App "Reagiert nicht mehr, Warten oder Beenden"?

  Alt 18. Mai 2017, 09:45
Hallo,

ich versuche jetzt auf Threads umzustellen, bekomme beim

Thread.Resume;

eine Warnung, das wäre deprecated!

Da ich ungern so was verwende, was wäre die Alternative?

Ciao
Stefan
  Mit Zitat antworten Zitat
SebastianZ

Registriert seit: 23. Jul 2009
57 Beiträge
 
Delphi 10.1 Berlin Architect
 
#4

AW: Android App "Reagiert nicht mehr, Warten oder Beenden"?

  Alt 18. Mai 2017, 09:51
Hallo,

ich versuche jetzt auf Threads umzustellen, bekomme beim

Thread.Resume; eine Warnung, das wäre deprecated!

Da ich ungern so was verwende, was wäre die Alternative?

Ciao
Stefan
Thread.Resume ist generell nicht zu empfehlen, da der Thread genau dort unterbrochen wird, wo er gerade steht, was unschöne Nebenwirkungen haben kann.
Wenn du den Thread pausieren musst, würde ich deinem Thread-Objekt eine Variable verpassen die das ganze steuert.

Delphi-Quellcode:
  TMyThread = class(TThread)
    procedure Execute; override;
  public
    LassLaufen: Boolean;
  end;

procedure TMyThread.Execute;
begin
  while Abbruchbedinung <> True do
  begin
    if LassLaufen then
    begin
      //Hier wichtiger Code der nicht unterbrochen werden soll
    end else Sleep(10);
  end;
end;
Alternativ zu TThread könntest du dir auch den TTask ansehen.
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
207 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Android App "Reagiert nicht mehr, Warten oder Beenden"?

  Alt 18. Mai 2017, 10:16
Danke, das war der richtige Denkanstoß!

Ich wollte Resume nicht zum Anhalten/Starten verwenden sondern nur starten nach Create (suspended = true) aber dafür findet sich ja dann Thread.Start

Ein anderes Problem hat sich dabei aber trotzdem aufgetan:

In einer Android-App kann man die Back-Taste drücken und dann ist das Programm geschlossen, der Thread läuft aber noch weiter!

Jetzt suche ich eine Möglichkeit, im OnKeyUp eines Formulars zu prüfen ob der Thread noch lebt.
Bevor er erzeugt wurde, kann man Nil abfragen, war er aber schon mal gestartet dann funktioniert Nil nicht mehr...

Was wäre der richtige Weg, muss ich eine globale Variable setzen, die der Thread dann, wenn er fertig ist, rücksetzt?

Ciao
Stefan
  Mit Zitat antworten Zitat
SebastianZ

Registriert seit: 23. Jul 2009
57 Beiträge
 
Delphi 10.1 Berlin Architect
 
#6

AW: Android App "Reagiert nicht mehr, Warten oder Beenden"?

  Alt 19. Mai 2017, 07:41
Du kannst entweder das Terminated-Kennzeichen des Threads verwenden, oder selbst eine property im Thread mitführen die den Status ausweist.

Falls der Thread mit .Terminate beendet wird und gesichert ist, dass er nach dem Terminate sehr zeitnah das arbeiten einstellt, kannst du das Terminted prüfen. Falls es nach dem Terminate noch eine weile weiterläut würde ich eine eigene Variable benutzen.
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
207 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Android App "Reagiert nicht mehr, Warten oder Beenden"?

  Alt 19. Mai 2017, 10:37
Ich habe es über eine globale Variable gelöst, funktioniert wie ich mir das vorstelle...

Ciao
Stefan
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf